【复习回顾】转型和instanceof

public class Applicaition {
    public static void main(String[] args) {
        /*
        向上转型:子 ---> 父 (自动类型转换)
        向下转型:父 ---> 子 (强制类型转换,需要加强制类型转换符)
        Java中允许向上转型,也允许向下转型
        无论是向上转型还是向下转型,两种类型之间
        必须有继承关系,没有继承关系编译器报错
         */


        //a5是Animal类型,向下转型成Cat,Animal和Cat之间存在继承关系
        Animal a5 = new Cat();
        Cat x = (Cat) a5;
        x.catchMouse();
        //不要随便做强制类型转换---向下转型
        //当需要访问子类对象中“特有”的方法

        //向下转型有风险吗?表面上a6是一个Animal,实际运行是Bird
        Animal a6 = new Bird();
        /*
        编译器检测到a6这个引用是Animal类型,
        而Animal和Bird之间存在继承关系,所以可以向下关系。编译不会出错。
        运行阶段,堆内存实际创建的对象是Bird对象
        在实际运行过程中,由于Bird和Cat之间无继承关系,Bird对象无法转换成Cat对象
         */
        //Cat y = (Cat) a6;
        //y.catchMouse();   ClassCastException
    
    }
}

Animal类

pu        blic class Animal {


    //重写是方法的重写,和属性无关



    public void move(){


        System.out.println("动物在奔跑");
    }

}

Cat类

public class Cat extends Animal {

    public  void move(){

        System.out.println("猫在跑");
    }
    public void catchMouse(){

        System.out.println("猫在抓老鼠");
    }

}

Bird类

public class Bird extends Animal {
    //重写父类的move()方法
    public void move(){
        System.out.println("鸟儿在飞翔");
    }
    //也有自己特有的方法
    public void sing(){
        System.out.println("鸟儿在歌唱");
    }
}

结果:

猫在抓老鼠
上一篇:用Java继承实现动物类


下一篇:RASA 对话管理系统DEMO及资源:二,中文支持及NER字典实现