请参阅以下代码:
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的构造函数的调用真正意味着什么?
答案 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。