首先得明确一些子类转型为父类的规则:
- 只能调用父类的属性
- 只能调用父类未被复写的方法
- 只能调用被子类复写的方法
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 Test
{
public static void main(String[] args)
{
A a = new B();
a.show();
B b = new C();
b.show();
}
}
1、A a =new B();是父类引用指向子类对象;
2、a.show()是在B类中寻找show方法,但没有,在父亲A那儿找到并调用show中show2方法,
因为show2被子类B复写所以调子类B的show2方法输出"爱";
3、B b=new C();是父类B指向子类C,在C类找到show()后调super.show(),在他爹B类未找到,找爷爷A,找到show后
调show2(),因为show2()被C类复写所以调子类C的show2()方法输出“你”。
|