classAFinder{publicintID=1;publicvoidFind1(){System.out.println("FindoutA1");}publicvoidFind2(){Find1();}}classBFinderextendsAFinder{publicintID=2;publicvoidFind1(){Syste...
class AFinder
{
public int ID = 1;
public void Find1()
{
System.out.println("Findout A1");
}
public void Find2()
{
Find1();
}
}
class BFinder extends AFinder
{
public int ID = 2;
public void Find1()
{
System.out.println("Findout B1");
}
public void Find3()
{
System.out.println("Findout B2");
}
}
class Test
{
public static void main(String [] args)
{
BFinder B = new BFinder();
AFinder A = B; //子类赋值给父类,父类对象到底变成怎么样了?
System.out.println(A.ID + ", " + B.ID);
A.Find1();
A.Find2();
B.Find1();
B.Find2();
B.Find3();
}
}
A是父类,B是继承的子类,B赋值给A,句柄A的成员到底怎么变的?是转成BFinder类了还是保持AFinder类?
代码的输出结果是:
1, 2
FIndout B1
FIndout B1
FIndout B1
FIndout B1
FIndout B2
很不理解,可以看到,A.Find1()输出的是Findout B1,说明A的方法Find1已经被覆盖了。
然而,A.Find3()却不存在,说明A没有完全转换成B
再看ID,A.ID也仍然是1,保持了A类初始化的ID,没有被B赋值
有没大神可以对输出的每一个结果帮我分析一下,谢谢!
展开