特点
- 上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能调用子类新增的方法(失掉了一些行为)
- 上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。上转型对象操作子类继承的方法或子类重写的实例方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,当对象的上转型对象调用这个实例方法时一定是调用了子类重写的实例方法。
class A{
int m;
int getM(){return m;}
int seeM(){return m;}
}
class B extends A{
int m;
int getM(){ return m+100; }
}
public class Demo {
public static void main(String[] args) {
B b=new B();
b.m=20;
System.out.println(b.getM());//输出120
System.out.println(b.seeM());//输出0
A a=b;
a.m=-100;//上转型对象访问的是被隐藏的m
System.out.println(a.getM());//上转型调用子类重写的getM()->输出120
System.out.println(b.seeM());//子类继承的seeM()操作的是被隐藏的m->输出-100
}
}
以上节选自java2实例教程第4版