package test4;
public class Test4 {
public static void main(String[] args){
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a2.show(c));
}
}
class A {
public String show(D obj){
return ("A and D");
}
public String show(A obj){
return ("A and A");
}
}
class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}
class C extends B{}
class D extends B{}
可以使用对象的哪些属性或方法,由其定义的类型来决定,而不是由对象的实际类型来决定。
如果子类重写了父类的某个方法,我们在调用子类对象中的这个方法时,系统将调用子类中定义的方法,无论这个对象被当成什么类型来看待。