向上转型
子类对象直接赋值给父类引用的过程称
既然已经将子类的特殊性抹去,作为一般的父类对象看待,那么失去的特性。在编译时只按照引用对象变量类型调用其包含的方法。
在继承层次,把子类对象赋值给父类后
(1)父类没有的方法不能调用
(2)子类没有重写的方法,执行父类的
(3)子类重写的方法,执行子类的
class Animal{
public void move() {
System.out.println("moving.....");
}
}
class Dog extends Animal{
public void move() {
System.out.println("狗狗跑.....");
}
}
class Bird extends Animal{
public void move() {
System.out.println("鸟flaying.....");
}
}
public class duotai {
public static void main(String[] args) {
Animal a1 = new Animal();
a1.move();
Animal a2 = new Dog();
a2.move();
Animal a3 = new Bird();
a3.move();
}
}
moving…
狗狗跑…
鸟flaying…
instanceof运算符
上面的a3.sing()是错误的,因为父类Animal中没有这个方法,要是想用
使用 instanceof判断对象是否是父类的实例
格式:
引用类型变量 instanceof 类名
结果为true就可以将父类强制向下转型成功:
public static void main(String[] args) {
Animal a2 = new Bird();
if(a2 instanceof Bird)
((Bird)a2).sing();
}
鸟儿在唱歌…