关闭

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

标签: stringclassc
730人阅读 评论(0) 收藏 举报
分类:

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)会去竞争第一语句的位置。

 

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

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

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:90915次
    • 积分:1223
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:19篇
    • 译文:0篇
    • 评论:11条
    最新评论