多态的好处和instanceof关键字

多态的好处

复制代码
class Animal{
    public void show(){
        System.out.println("。。。");
    }
}
class Panda extends Animal{
    @Override
    public void show() {
        System.out.println("熊猫");
    }
}
class Dog extends Animal{
    @Override
    public void show() {
        System.out.println("狗");
    }
}

class Food{
    public void show(){
        System.out.println("。。。");
    }
}
class Bamboo extends Food{
    @Override
    public void show() {
        System.out.println("竹子");
    }
}
class meat extends Food{
    @Override
    public void show() {
        System.out.println("肉");
    }
}
复制代码
class Feed{
    public void feeder(Animal a,Food f){
        a.show();
        f.show();
    }
}
复制代码
    public static void main(String[] args) {
        Animal a = new Panda();
        Food f = new Bamboo();
        Animal a1 = new Dog();
        Food f1 = new meat();
        Feed feed = new Feed();
        feed.feeder(a,f);
        feed.feeder(a1,f1);
    }
复制代码

我们通过创建动物类和事物类,创建这两个类的子类继承父类并重写父类方法,再创建展示类,用来接收传递的动物类对象以及事物类对象,

只要在创建对象时使用父类引用子类对象的方式创建,并将创建的对象传递给展示类中的方法,就可以想要创建哪个类都可以

多态的好处:

1、简化代码

2、提高了可扩展性

3、提高了程序的可维护性

 

 

instanceof关键字

多态中的类型转换

向上转型(自动转换)

格式:<父类型><引用变量名>= new<子类型>();

特点:

  子类转为父类父类的引用指向子类对象。

  自动进行类型转换此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法此时通过父类引用变是无法调用子类特有的属性和方法

 

 

向下转型(强制转换)

格式:<子类型><引用变量名>=(<子类型>)<父类型的引用变量>;

特点:

  父类转为子类,父类引用转为子类对象。

  强制类型转换 在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

 

如果没有转换为真实子类类型,会出现类型转换异常

复制代码
class Person{
    public void eat(){
        System.out.println("。。。");
    }
}
class Stundet extends Person{
    @Override
    public void eat() {
        System.out.println("学生类吃");
    }
    public void study(){
        System.out.println("学习");
    }
}
class Doc extends Person{
    @Override
    public void eat() {
        System.out.println("子类吃");
    }
}
复制代码
    public static void main(String[] args) {
        Person p = new Stundet();
        p.eat();
        Stundet s = (Stundet) p;
        s.study();
        Doc d = (Doc)p;
    }

类型转换错误:

 

 

instanceof关键字用来测试它左边的是否是右边的类的实例,返回值为boolean类型

复制代码
    public static void main(String[] args) {
        Person p = new Stundet();
        p.eat();
        if (p instanceof Stundet){
            Stundet s = (Stundet) p;
            s.study();
        }else if (p instanceof Doc){
            Doc d = (Doc)p;
        }
    }
复制代码

运行结果:

 

 

posted @   xjw12345  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示