【精选】java初识多态 多态的优势和弊端

复制代码
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

多态的优势

多态的弊端

引用数据类型的类型转换,有几种方式

强制类型转换能解决什么问题?

代码


多态的优势

  • 在多态的形式下,右边对象可以实现解耦合,便于扩展和维护
java 复制代码
person p = new student ();
p.work(); //业务逻辑发生改变时,后续代码无需修改

多态的弊端

  • 不能使用子类的特有功能

引用数据类型的类型转换,有几种方式

  • 自动类型转换
java 复制代码
person p = new student();
  • 强制类型转换
java 复制代码
student s = (student)p;

强制类型转换能解决什么问题?

  • 可以转换成真正的子类类型,从而调用子类独有功能
  • 转换类型与真实对象类型不一致会报错
  • 转换的时候用instanceof关键字进行判断

代码

测试类test

java 复制代码
package demon8;

public class test {
    public static void main(String[] args) {
        //创建对象
        Animal a = new Dog();
        //编译看左边,运行看右边
        a.eat();

        //多态的弊端
        //不能调用子类的特有功能
        //报错的原因?
        //当调用成员方法的时候,编译看左边,运行看右边
        //那么在编译的时候会先检查左边的父类中有没有这个方法,如果没有直接报错。
        //a.lookHome();


        //解决方案:
        //变回子类类型就可以了
        //细节:转换的时候不能瞎转,如果转成其他类的类型,就会报错
        //Cat c = (Cat) a;
        //c.catchMouse();

        /*if(a instanceof Dog){
            Dog d = (Dog) a;
            d.lookHome();
        }else if(a instanceof Cat){
            Cat c = (Cat) a;
            c.catchMouse();
        }else{
            System.out.println("没有这个类型,无法转换");
        }*/

        //新特性
        //先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d
        //如果不是,则不强转,结果直接是false
        if(a instanceof Dog d){
            d.lookHome();
        }else if(a instanceof Cat c){
            c.catchMouse();
        }else{
            System.out.println("没有这个类型,无法转换");
        }

    }
}

class Animal{
    public void eat(){
        System.out.println("动物在吃东西");
    }
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    public void lookHome(){
        System.out.println("狗看家");
    }
}

class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃小鱼干");
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}
相关推荐
IT_陈寒1 小时前
SpringBoot这个自动配置坑我跳了三次
前端·人工智能·后端
kyriewen1 小时前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程
Larcher2 小时前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
默_笙2 小时前
🃏 JS 只有 8 种数据类型,但我花了 2 天才搞懂 null 和 undefined 的区别
javascript
牧艺2 小时前
从零到协同:构建类飞书在线文档系统的五个技术重难点
前端·人工智能
用户3521802454752 小时前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
jump_jump3 小时前
流式 HTML:从 htmx 片段装配到浏览器原生增量渲染
javascript·性能优化·前端工程化
红尘散仙3 小时前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
用户8356290780513 小时前
使用 Python 自动化 PowerPoint 形状布局与格式设置
后端·python
袋鼠云数栈UED团队3 小时前
一套 Spec-First 的 AI 编程工作流
前端·人工智能