19_多态应用以及引用类型转换的例子
首先定义一个类动物类
package ploy; //定义一个动物测试类 public class TestAnimal { public static void main(String[] args) { // 多态形式 父类引用指向子类对象 Animal animal = new Cat(); //调用eat()方法 备注:当你在使用多态的时候,程序会首先检查父类中是否含有该方法, //如果没有,择编译错误; 如果有,执行的是子类重写之后的方法。 animal.eat(); Animal animal2 = new Dog(); //调用eat()方法 animal2.eat(); //调用eat()方法 //Cat cat = new Cat(); //Dog dog = new Dog(); showCatEat(new Cat());//Animal animal = new Dog(); dog /* //查看猫吃的东西 showCatEat(cat);*/ /* //查看狗吃的东西 showDogEat(dog);*/ } //查看猫具体吃什么东西 public static void showCatEat(Cat cat){ cat.eat(); } //查看狗具体吃什么东西 public static void showDogEat(Dog dog){ dog.eat(); } /* 以上两个方法,可以简化一下 */ //查看动物他吃什么 public static void showAnimalEat(Animal animal){ animal.eat(); } }
狗的类:
package ploy; //定义一个字类 public class Dog extends Animal{ //子类重写父类中的eat()方法 @Override public void eat() { System.out.println("看骨头"); } //看家 public void lookHome(){ } }
猫的类:
package ploy; //定义一个子类 public class Cat extends Animal{ //子类重写父类中的eat()方法 @Override public void eat() { System.out.println("吃鱼"); } //抓老鼠 public void catchMouse(){ System.out.println("抓老鼠"); } }
测试类:
package ploy; //定义一个动物测试类 public class TestAnimal02 { public static void main(String[] args){ //多态的形式 父类引用指向子类对象 //向上转型 Animal animal = new Dog(); //猫抓老鼠的功能 animal.eat(); //狗看家的功能 //添加校验instanceof 变量名 instanceof 数据类型 if (animal instanceof Dog){ //表明他是Dog类型 Dog dog = (Dog) animal; dog.lookHome(); } if (animal instanceof Cat){ //向下转型 子类类型 变量名 = (子类类型) 父类变量名 Cat cat = (Cat) animal; cat.catchMouse(); } // java.lang.ClassCastException: 类型转换异常 两个没有任何关联的类是不能转换的 // 两个类是一种父子类关系,可以实现转换 } }