如何在没有任何与之关联的实例的情况下调用构造函数?

时间:2015-03-24 18:40:15

标签: java oop inheritance constructor super

请参阅以下代码:

class A {
    private int b;
    A(){
        b=5;
    }
}

class B extends A {

}

class C {
    public static void main(String args[]){
        B b=new B();
    }
}

当我创建B的实例时,B的默认构造函数调用A的构造函数,该构造函数将值赋给实例变量b。 我的查询是因为实例变量与类的实例相关联,并且我们没有创建任何A类实例,这个赋值(b = 5)究竟意味着什么?当没有A的实例时,对A的构造函数的调用真正意味着什么?

2 个答案:

答案 0 :(得分:5)

B extends A表示B 的实例也是 A的实例,就像狗也是动物一样。这两者同时存在,因此b=5有意义是完全正常的,因为B也是A并且正在初始化b A中的{1}}字段。

答案 1 :(得分:0)

在Java中检查这个discussion关于类继承与对象继承的内容。根据{{​​3}},你会说B类不会从A类继承私有字段b。

  

声明为private的类的成员不会继承   该类的子类。

然而,B的实例继承了A中的所有数据,包括私有字段b。