假设B类是A类的子类或间接子类,当子类B创建一个对象,并把这个对象的引用放到A类的对象中时,如:
A a;
a=new B();
A a;
B b=new B();
a=b;
那么,称这个A类对象a是子类对象b的上转型对象。
对象的上转型对象的实体是由子类负责创建的,但上转型对象会失去原子类对象的一些属性和功能。有如下特点:
1)上转型对象不能操作子类新增的成员变量(失掉这部分属性),不能使用子类新增的方法(失掉这部分功能)。
2)上转型对象可以操作继承或隐藏的成员变量,也可以使用子类继承或重写的方法。
3)如果子类重写了父类的某个方法,上转型对象调用的方法是重写的方法。
4)可以将上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类的所有属性和功能。
注:不要将父类创建的对象和子类对象的上转型对象混淆。
例:
class Monkey{
private int n=100;
void speak(String s){
System.out.println(s);
}
}
class People extends Monkey{
void speak(String s){
System.out.println("**"+s+"**");
}
void computer(int a,int b){
int c=a+b;
System.out.println(c);
}
}
public class ShangZhuanXingExample{
public static void main(String args[]){
Monkey monkey = new People();//monkey是People对象的上转型对象
monkey.speak("I love this game");
People people=(People)monkey;//将上转型对象再强制转换为子类对象
people.computer(1,1);
}
}
/*输出
**I love this game**
2
*/