Java中的继承..为什么它不在此代码中打印“5”?

时间:2015-09-04 19:47:29

标签: java inheritance constructor

为什么输出只是"AB8",为什么"5"没有打印?!!

有两个班级。其中一个延伸自另一个。 当我从子类创建一个Object时,它给我输出"AB8", 我首先想到的是"A5B8"。所以我会理解为什么?!

public class A {
    public A(){
        System.out.println("A");
    }
    public A(int i){
        this();
        System.out.println(i);
    }
}



public class B extends A{
    public B(){
        System.out.println("B");
    }
    public B(int i){
        this();
        System.out.println(i+3);
    }
}



public class Test {

    public static void main(String[] args) {
        new B(5);
    }
}

3 个答案:

答案 0 :(得分:1)

- 表示构造函数

在这种情况下,调用A(),打印出" A"。

-Child构造函数被称为

在这种情况下,调用B(int),打印出" B"从这个调用() 然后打印5 + 3,即8。

逐行浏览代码,确实很有帮助......

答案 1 :(得分:1)

在B&#39的构造函数B(int i)中,调用this(),它是B的无参数构造函数。这将隐式调用A的无参数构造函数,但它永远不会调用{{1 }}

最好使用A(int i)关键字明确调用A的构造函数。控制流程变得更加清晰。

super

答案 2 :(得分:0)

当您致电new B(5);时,流程为:new A()(因为A是B&#39的超类),new B()(因为您调用了this()),最后System.out.println(i+3);