视频里毕老师讲过
在多态中成员变量的特点:只看引用变量所属的类。即无论编译和运行,都参考左边(引用型变量所属的类)。
--------------------------------------------------------------------------------------------------------------------
那为什么下面代码的答案不是B C 2 而是B C 5呢?
按照我的理解是:Super类里面的i变量通过 构造函数的初始化后就变成2了。然后Demo类里面的i变量通过构造函数初始化后就变成了5,
而d.i调用的i是Super类里面的,那应该是i=2啊。。。求大神们解答一下。
-------------------------------------------------------------------------------------------
class Super
{
int i = 0;
public Super()
{
System.out.println("B");
i+=2;
}
}
class Demo extends Super
{
public Demo(String a)
{
System.out.println("c");
i = 5;
}
public static void main(String[] args)
{
int i = 4;
Super d = new Demo("A");
System.out.println(d.i);
}
}
创建对象Super d = new Demo(); 先运行子类构造函数,子类构造函数内先运行super() 父类构造函数, 所以i被赋值为2,(此i在子类中,而非父类)
这时父类中无论是构造函数Super() 还是i , 应该没有任何动作, 有的只是在子类中的 i = 0; i += 2; i += 5 ; 所以d.i结果才会为7.