对象转型
对象转型
1、 一个基类的引用类型变量可以指向其子类对象;
2、 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法);
3、 可以使用 “引用变量 instance of类名” 来判断该引用型变量所指向的对象是否属于该类或者该类的子类;
4、 子类的对象可以当作基类的对象来使用,称作向上转型;反之为向下转型。
注意:
1、向上转型对象不能操作子类新增的成员变量,不能使用子类新增的方法。
2、向上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的或重写的方法。
3、如果子类重写了父类的某个方法后,当对象的向上转型对象调用这个方法时一定调用了这个重写的方法,因为程序运行时知道,这个向上转型对象的实体是子类创建的。
4、可以将对象的向上转型对象在强制转换到一个子类对象,这时,该子类对象又具备了子类所有的属性和功能。
示例:
public class CastingTest {
public static void main(String[] args){
Animal a = new Animal("a");
Cat c = new Cat("c", "catgreen");
Dog d = new Dog("d", "doggreen");
System.out.println(a instanceof Animal); //true
System.out.println(c instanceof Animal); //true
System.out.println(d instanceof Animal); //true
System.out.println(a instanceof Dog); //false
a = new Dog("d2", "dog2Color"); //父类引用指向子类对象 ,向上转型
System.out.println(a.getName()); //d2
System.out.println(d.getName()); //d
// System.out.println(a.getFurColor); //父类不能访问子类特有的属性
System.out.println(a instanceof Animal); //true a是一只动物
System.out.println(a instanceof Dog); //true a是一只狗
Dog d2 = (Dog) a; //强制类型转换 ,向下转型
System.out.println(d2.getFurColor()); //可访问狗的属性
}
}
class Animal{
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal{
private String furColor;
public Dog(String name, String furColor) {
super(name);
this.furColor = furColor;
}
public String getFurColor() {
return furColor;
}
public void setFurColor(String furColor) {
this.furColor = furColor;
}
}
class Cat extends Animal{
private String eyeColor;
public Cat(String name, String eyeColor) {
super(name);
this.eyeColor = eyeColor;
}
public String getEyeColor() {
return eyeColor;
}
public void setEyeColor(String eyeColor) {
this.eyeColor = eyeColor;
}
}