当前位置: 首页 > news >正文

面向对象编程——重写和多态

向上转型和向下转型

向上转型和向下转型是认识多态的基础
向上转型:对于一对父子关系的类,假如用父类的引用类型去接收子类的的引用称为向上转型
向下转型:对于一对父子关系的类,假如用子类的引用类型去接收父类的的引用称为向上转型
对于赋值的场景可以有以下三个:

  1. 直接赋值
  2. 方法传参
  3. 方法返回值

instanceof关键字

在使用向下转型的时候会有不安全的隐患,比如下面的代码

class Animal {public void eat() {System.out.println("Animal.eat()");}
}class Dog extends Animal {public void eat() {System.out.println("Dog.eat()");}
}class Cat extends Animal {public void eat() {System.out.println("Cat.eat()");}
}public class Test {public static void main(String[] args) {Dog dog = new Dog();Cat cat = new Cat();Animal animal = dog;  // Cat cat2 = (Cat) animal;  // 这一行代码报错;因为animal是Dog类的引用,不能强转成Catif (animal instanceof Cat) {Cat cat2 = (Cat) animal;}}
}

这个时候可以使用instanceof关键字,判断当前变量的引用是否和需要强转的类一致;可以避免向下转型的错误。

重写

重写是发生在继承关系中,在子类中重写父类相同的成员方法;以达到多态的目的

重写的三个要求:

  1. 方法名必须相同
  2. 参数列表必须相同(类型、个数、顺序)
  3. 返回值必须相同(也可以是构成父子关系,也称为协变

重写的注意事项:
4. 被 private、static、final 修饰的方法不能重写
5. 子类的访问权限修饰符的权限必须大于等于父类的(private < 默认权限 < protected < public)
6. 构造方法不能发生重写

多态

多态的产生主要是为了降低代码的重复性,避免使用大量的 if - else;在修改的时候也更加方便。


http://www.mrgr.cn/news/62191.html

相关文章:

  • 技术成神之路:二十三种设计模式(导航页)
  • Linux系统编程——信号量
  • Labview写CIP协议
  • 袋鼠云产品功能更新报告12期|让数据资产管理更高效
  • 【c语言】运算符汇总(万字解析)
  • [论文阅读]SimCSE: Simple Contrastive Learning of Sentence Embeddings
  • UART-通用异步收发器
  • 推荐使用 CompletableFuture 框架进行异步操作,很强很方便
  • 从一到无穷大 #38:讨论 “Bazel 集成仅使用 Cmake 的依赖项目” 通用方法
  • 智航船舶租赁综合管理系统
  • 【C++刷题】力扣-#575-分糖果
  • python的lambda实用技巧
  • 深度学习之激活函数
  • 避免关键任务延迟的资源分配方法
  • Golang高级语法-工具链
  • 拓展学习-golang的基础语法和常用开发工具
  • 博科交换机SNMP采集(光衰)信息
  • 【FinalShell问题】FinalShell连接虚拟机超时问题
  • 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
  • RegCM模式运行./bin/regcmMPI报错
  • 函数声明不是原型error: function declaration isn’t a prototype
  • 爆肝整理14天AI工具宝藏合集(三)
  • Node.js:模块 包
  • 前端文件上传组件流程的封装
  • React 组件生命周期与 Hooks 简明指南
  • python pytest-mock插件