2:看程序写结果(先判断有没有问题,如果没有,写出结果)
package com.shujia.面试题;
/*
2:看程序写结果(先判断有没有问题,如果没有,写出结果)
*/
class A {
public void show()
{
show2();
}
public void show2()
{
System.out.println("我");
}
}
class B extends A
{
public void show2()
{
System.out.println("爱");
}
}
class C extends B
{
public void show()
{
super.show();
}
public void show2()
{
System.out.println("你");
}
}
public class FaceTest2 {
public static void main(String[] args)
{
A a = new B();
a.show();
/*
父类的引用指向子类的对象,首先编译看父类A中有没有show,有show,编译通过,根据多态访问成员的特点(编译看左,运行看右),
接着看子类B中的show方法(子类B中的show方法是根据父类A继承来的,并不是共享的)指向子类B中的show2方法,
子类B中的show2方法,子类B的show2方法则是输出“爱”
*/
B b = new C();
b.show();
/*
父类的引用指向子类的对象,首先编译看父类中有没有show方法(子类C的父类B中,父类B也是父类A的子类,所以继承有show方法),
所以编译通过,子类C运行show方法,调用父类B的show方法,父类B中的show方法是调用父类B的父类A的show方式,是调用show2方法,
运行依然看子类C中的show2方法,所以结果是“你”
*/
}
}
标签:面试题,show,子类,void,结果,写出,父类,public,show2
From: https://www.cnblogs.com/peculiar/p/18056733