注意(子类实例赋给父类引用):
- 父类引用不能调用子类中特定方法;
- 父类引用调用的是子类重写或实现父类的方法,引用变量是子类对象的地址。
- 首先调用子类重写的方法。并且,参数如果不匹配,会自动向上转型。
package canshu;
class A {
public String show(D obj){
return ("A and D");
}
public String show(A obj){
return ("A and A");
}
}
class B extends A{
@Override
public String show(A obj){
return ("B and A");
}
public String show(B obj){
return ("B and B");
}
public String show1(B obj){
return ("B vvvvand B");
}
}
class C extends B{}
class D extends B{}
public class test{
public static void main(String[] args){
A ab = new B();
A a = new A();
B b = new B();
C c = new C();
D d = new D();
//报错:不能调用子类特定的方法;
//System.out.println(ab.show1(a));
System.out.println(ab.show(a));
System.out.println(ab.show(b));
System.out.println(ab.show(c));
System.out.println(ab.show(d));
}
}
输出结果:
B and A
B and A
B and A
A and D