public abstract class Animal {
public abstract void eat();
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("够吃骨头!");
}
public void watchHouse(){
System.out.println("狗看家!");
}
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠!");
}
}
/*
向上转型一定是安全的,没有问题的,正确的,但是也有一个弊端:
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。
解决方案:用对象的向下转型【还原】。
*/
public class Demo01Main {
public static void main(String[] args) {
//对象的向上转型,就是:父类引用指向子类对象
Animal animal = new Cat();
animal.eat();
//animal.catchMouse();一旦向上转型为父类,那么就无法调用子类原本特有的内容
//向下转型,进行“还原”动作
Cat cat = (Cat) animal;
cat.catchMouse();//猫抓老鼠!
//下面是错误的向下转型
//本来new的对象是一只猫,现在非要当做狗,错误写法,编译不会报错,但是运行会出现异常:
//java.lang.ClassCaseException,类转换异常
//Dog dog = (Dog) animal;//java.lang.ClassCastException:
}
}