1.定义:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
2.解释说明:
假设,A类是B类的父类,当子类创建一个对象,并把这个对象的引用放到父类的对象中时,例如:A a ;
a=new B();
或 A a ;
B b=new B();
a=b;
这时,称对象a是对象b的上转型对象
注意:1.上转型对象不能操作子类新增的成员变量(失掉了这部分属性);不能调用子类新增的方法(失掉了一些功能)。
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类的重写方法。上转型对象操作子类继承的方法或子类重写的方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个方法后,当对象的上转型对象调用这个方法时一定是调用了子类重写的方法。
3. 不要将父类创建的对象和子类对象的上转型对象混淆。
4.可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能。
5.不可以将父类创建的对象的引用赋值给子类声明的对象。
3.代码示例
public class Text {
static class Anthropoid{
double m=12.58;
void crySpeak(String s){
System.out.println(s);
}
}
static class People extends Anthropoid{
char m='A';
int n=60;
void compute(int a,int b){
int c=a+b;
System.out.println(a + "加" + b + "等于" + c);
}
@Override
void crySpeak(String s){
System.out.println(super.m + "**" + s + "**" + m);
}
}
public static void main(String[] args) {
People people=new People();
// monkey是people的上转型对象
Anthropoid monkey=people;
// 等同于people调用重写的crySpeak方法
monkey.crySpeak("A HAHA");
// monkey.n=100;// 非法,n是子类新增的成员变量
// monkey.computer(12,19);// 非法,子类新增的方法
// 操作隐藏的m,不等同于people.m
System.out.println(monkey.m);
// 操作子类的m
System.out.println(people.m);
// 把上转型对象前置转换为子类对象
People zhang=(People) monkey;
zhang.compute(55,33);
zhang.m='Z';
System.out.println(zhang.m);
}
}
结果:
12.58**A HAHA**A
12.58
A
55加33等于88
Z