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:  类型转换异常   两个没有任何关联的类是不能转换的
//                                                                      两个类是一种父子类关系,可以实现转换
    }

}
原文地址:https://www.cnblogs.com/rxqq/p/13922497.html