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

Java学习第十三天

Java多态


多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作

多态性是对象多种表现形式的体现。

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象:Parent p = new Child();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

实例:

public class Test {public static void main(String[] args) {show(new Cat());  // 以 Cat 对象调用 show 方法show(new Dog());  // 以 Dog 对象调用 show 方法Animal a = new Cat();  // 向上转型  a.eat();               // 调用的是 Cat 的 eatCat c = (Cat)a;        // 向下转型  c.work();        // 调用的是 Cat 的 work}  public static void show(Animal a)  {a.eat();  // 类型判断if (a instanceof Cat)  {  // 猫做的事情 Cat c = (Cat)a;  c.work();  } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a;  c.work();  }  }  
}abstract class Animal {  abstract void eat();  
}  class Cat extends Animal {  public void eat() {  System.out.println("吃鱼");  }  public void work() {  System.out.println("抓老鼠");  }  
}  class Dog extends Animal {  public void eat() {  System.out.println("吃骨头");  }  public void work() {  System.out.println("看家");  }  
}

吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠

 虚函数

虚函数的存在是为了多态。

Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

多态的实现方式

方式一:重写

方式二:接口

方式三:抽象类和抽象方法

http://www.lryc.cn/news/251506.html

相关文章:

  • 【Delphi】实现彩色日志显示框(TRichEdit Helper)
  • Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
  • 图像批量设计软件Retrobatch Pro mac中文版功能特色
  • python第3天之函数
  • SQL Server 数据库,为products表添加数据
  • C语言结构体详解(二)(能看懂文字就能明白系列)文章很长,慢慢品尝
  • WPF不使用AllowsTransparency实现高性能透明背景异形窗体
  • 唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能
  • uniapp+微信小程序监听返回事件
  • Python函数的高级用法
  • excel单元格内换行按什么快捷键
  • docker容器内部文件挂载主机
  • python 实现一个简单的计算器
  • 前端对浏览器的理解
  • Linux(openssl):X509_verify通过ca证书的public key验证证书的签名
  • 全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
  • 深入了解汉字转拼音转换工具:原理与应用
  • 沈阳师范大学期末考试复习pta循环数组函数指针经典编程题汇总+代码分析
  • 【面试攻略】Oracle中blob和clob的区别及查询修改方法
  • An illegal reflective access operation has occurred问题记录
  • 抓取检测(Grasp Dection)
  • 人工智能学习4(特征选择)
  • vue中keep-alive的使用
  • 2023年第十二届数学建模国际赛小美赛B题工业表面缺陷检测求解分析
  • 2023全球数字贸易大赛-web3,区块链,诺威信,浪潮云,微众区块链,福建中科星泰,瓴羊区块链,联想-元宇宙,硅基智能-
  • 计算机网络一:TCP/IP基础概念和常见面试题
  • 图论|684.冗余连接 685. 冗余连接 II
  • 依据小兔鲜项目,总结Javascript数组常用方法
  • 制作飞腾(arm)芯片架构的nexus镜像
  • Git 标签管理