Notes(1):构造方法的调用

来源:互联网 发布:什么软件可以制作证件 编辑:程序博客网 时间:2024/06/06 23:49

Note:

所有的子类构造方法默认调用父类的无参构造方法,只有当子类构造方法中指明调用父类的构造方法时,才会调用相应的父类构造方法。

Example:

public class Person {

    Person(){

           System.out.println("This is the Person!");

    }

    Person(String s){

           System.out.println("Person : "+s);

    }

}

 

public class Chinese extends Person{

       Chinese(){

              System.out.println("This is a Chinese!");

       }

       Chinese(String name){

              super(name);

              System.out.println("Chinese name is : "+name);

       }

       Chinese(String name,String address){

              this(name);

              System.out.println(name+"'s address is:"+address);

       }

       public static void main(String args[]){

              Chinese c=new Chinese("XiaoWang");

       }

}

运行的结果为:

Person : XiaoWang

Chinese name is : XiaoWang

 

在子类中可以使用super来调用父类的构造方法,可以使用this来调用自身的构造方法。

如:当main变成如下代码时,

public static void main(String args[]){

              Chinese c=new Chinese("XiaoWang","Shenzhen");

       }

运行的结果为:

Person : XiaoWang

Chinese name is : XiaoWang

XiaoWang's address is:Shenzhen

 

请注意:

如果把子类的构造函数改成如下形式是错误的:

Chinese(String name){

       System.out.println("Chinese name is : "+name);

super(name);

}

调用构造函数的语句必须放在构造函数所有语句的最前面。

所以,如下的形式也自然是错误的:

Chinese(String name,String address){

              super(name);

              this(name);

              System.out.println(name+"'s address is:"+address);

       }

因为super(name)this(name)会去竞争第一语句的位置。

 

由上面的描述,我们也可以得到下面的结论:

当有多层继承关系的时候,构造函数的执行顺序也是自上而下的,即先执行顶层类的构造函数,然后顺次执行到最低层类的构造函数,可以用栈的思想来理解。

 
原创粉丝点击