对象的上转型对象

假设,B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如
A a;
B b=new B();
a=b;
那么,就称对象a是子类对象b的上转型对象.
对象的上转型对象
上转型对象不能操作子类声明定义的成员变量(失掉了这部分属性),不能使用子类声明定义的方法(失掉了一些功能)。
◆上转型对象可以代替子类对象去调用子类重写的实例方法。如果子类重写的方法是实例方法,那么上转型对象调用重写的方法时,就是通知对应的子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,子类对象的上转型对象调用这个方法时,一定是调用了这个重写的方法。
◆上转型对象可以调用子类继承的成员变量和隐藏的成员变量。
可以将对象的上转型对象再强制转换到一个子类对象,这时该子类对象又具备了子类的所有属性和功能。例子中,使用了上转型对象,效果 如图
class A{
double n;
int m;
void f(){
System.out.printf(“子类继承方法f(),n=%f,m=%d\n”,n,m);
}
void g(){
System.out.printf(“你好,n=%f,m=%d\n”,n,m);
}
}
class B extends A{
int n=12;
void g(){
System.out.printf(“子类重写方法g(),n=%d,m=%d\n”,n,m);
}
void cry(){
System.out.printf(“子类新增的方法,n=%d,m=%d\n”,n,m);
}
}
public class Example5_8{
public static void main(String args[ ]){
A a;
a=new B(); //a是子类对象的上转型对象
a.n=0.618; //操作子类隐藏的double类型成员n
a.m=200; //操作子类继承的成员m,等价于b.m=200;
a.f(); //调用子类继承的方法,等价于b.f();
a.g(); //调用子类重写的方法,等价于b.g();
B b=(B)a; //上转型对象强制转换成子类对象
b.n=555; //操作子类新增的int类型成员n
b.cry(); // a.cry(); 是非法的 //上转型对象失去了新增的变量和方法
}
}

对象的上转型对象

本文转载自
http://blog.csdn.net/w5761499123/article/details/51096851