Java5-3 对象的上转型对象
1.上转型对象:
如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,则称A类对象a是子类B对象b的上转型对象。
如:
A a;
a = new B();
OR
A a;
B b = new B();
a = b;
2.上转型对象性质:
对象b的上转型a的实体是有子类B创建的,但是上转型对象会失去子类B的一些属性和功能。上转型对象具有以下特点:
- 上转型对象不能操作子类新增加的成员变量,不能使用子类新增的方法。即为较子类B失去一些属性和功能,这些属性和功能是新增的。
- 上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承的或重写的方法。即为上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写。
- 上转型对象调用方法时,就是调用子类继承和重写过的方法。而不会是新增的方法,也不是父类原有的方法。
- 可以将对象的上转型对象再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能。
3.上转型对象举例:
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(); 是非法的 //上转型对象失去了新增的变量和方法
}
}
4.继承与多态
多态性:父类的某个方法被子类重写时,可以产生各自的功能行为
举例:
class 动物{
void cry( ){
}
}
class 狗 extends 动物{
void cry(){
System.out.println("这是狗的叫声:汪汪汪");
}
}
class 猫 extends 动物{
void cry(){
System.out.println("这是猫的叫声:喵喵喵");
}
}
public class test{
public static void main(String args[ ]){
动物 animal=new 狗();
animal.cry();
animal=new 猫();
animal.cry();