您的位置:首页 > 编程语言 > Java开发

java 类的继承,实例化一个类时 构造方法的调用顺序

2018-06-10 21:03 260 查看

测试代码如下:

public class Gouzaofangfa {

public static void main(String[] args) {
new A();//----------------- A()<<
System.out.println();
new A(1);//---------------- A(1)<<
System.out.println();
new A(1,2);//-------------- A(1,2)<<
System.out.println();

///////////////////////////////////////////////////////

System.out.println();
new B();//----------------- A()<< B()<<
System.out.println();
new B(1);//---------------- A()<< B(1)<<
System.out.println();
new B(1,2);//-------------- A(1,2)<< B(1,2)<<
System.out.println();

///////////////////////////////////////////////////////

System.out.println();
new C();//----------------- A()<< B()<< C()<<
System.out.println();
new C(1);//---------------- A()<< B()<< C(1)<<
System.out.println();
new C(1,2);//-------------- A(1,2)<< B(1,2)<< C(1,2)<<
}
}

class A{
public A(){
System.out.print("A()<< ");
}
public A(int i){
System.out.print("A("+i+")<< ");
}
public A(int i,int j){
System.out.print("A("+i+","+j+")<< ");
}
}

class B extends A{
public B(){
//未super父类的构造方法
System.out.print("B()<< ");
}
public B(int i){
//super父类无参构造方法
super();
System.out.print("B("+i+")<< ");
}
public B(int i,int j){
//super父类带两个参数的构造方法
super(i,j);
System.out.print("B("+i+","+j+")<< ");
}
}

class C extends B{
public C(){
//未super父类的构造方法
System.out.print("C()<< ");
}
public C(int i){
//未super父类的构造方法
System.out.print("C("+i+")<< ");
}
public C(int i,int j){
//super父类带两个参数的构造方法
super(i, j);
System.out.print("C("+i+","+j+")<< ");
}
}

输出结果如下:

A()<< 
A(1)<< 
A(1,2)<< 

A()<< B()<< 
A()<< B(1)<< 
A(1,2)<< B(1,2)<< 

A()<< B()<< C()<< 
A()<< B()<< C(1)<< 
A(1,2)<< B(1,2)<< C(1,2)<< 

结论:

实例化一个类的时候 会最先调用他们父类的构造方法

在这里A是B的父类,而B又是C的父类

所以在实例化C的时候 先实例化A 再实例化B 最后实例化C


一个类有多个构造方法时

如果没有super父类带参的构造方法时 会默认调用父类无参构造方法

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐