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

【Java学习笔记】多态

多态(polymethod

说明:多态是建立在封装和继承的基础之上的

为什么需要多态?

代码的复用性不高,不利于维护

举例:人给动物喂食这个方法,如果动物和添加了,那事物也需要添加,那必然会造成需要不断地添加方法,就会造成代码的复用性不高


多态的体现

一、方法的多态

同类中方法的重载和继承关系中==方法的重写(覆盖)==体现多态,虽然都是同一个方法,但是可以以一定的规则调用不同的方法,提高了代码的复用性

二、对象的多态(核心,困难,重点

总结:多态的体现就在于父类的引用(编译类型)可以接收(指向)子类的对象(运行类型),这样的好处在于方便统一管理无需重复编写代码


多态的使用细节

代码示例

// 父类
package poly;public class animal {public void run(){System.out.println("调用animal类中的---run()方法");}public void eat(){System.out.println("调用animal类中的---eat()方法");}public void show(){System.out.println("调用animal类中的---show()方法");}public void get(){System.out.println("调用animal类中的---get()方法");}
}// 子类
package poly;public class cat extends animal{public void run(){System.out.println("调用cat类中的---run()方法");}public void eat(){System.out.println("调用cat类中的---eat()方法");}public void show(){System.out.println("调用cat类中的---show()方法");}public void print(){System.out.println("调用cat类中的---print()方法");}
}// 主类
package poly;public class main {public static void main(String[] args) {/*说明(1)父类和子类都有run(),eat(),show()方法(2)父类独有get()方法,子类没有(3)子类独有print()方法,父类没有*///一、向上转型(可以调用父类的所有成员,但是不能调用子类的)animal animal = new cat(); // 使用父类的引用接收子类的对象animal.eat();  // 运行结果看子类,运行类型是cat,优先调用cat中的eat()方法animal.run();animal.show();animal.get(); // 运行类型是子类cat,但是没有get()方法,于是找到父类中get()方法调用//        animal.print();  // 错误,无法调用子类//二、向下转型(可以调用子类的所有成员)cat cat = (cat)animal;  // 原先用animal指向cat对象的堆空间,强转之后使用cat引用指向cat.print();}
}//运行结果
调用cat类中的---eat()方法
调用cat类中的---run()方法
调用cat类中的---show()方法
调用animal类中的---get()方法
调用cat类中的---print()方法

特别注意!!!

Java 中,子类引用不可以指向父类,但是父类引用可以指向子类,这是由于继承关系的特性

一、 父类引用指向子类对象

二、子类引用不能指向父类对象:

http://www.xdnf.cn/news/5463.html

相关文章:

  • HTML5中的Microdata与历史记录管理详解
  • 安装typescript时,npm install -g typescript报错
  • .Net HttpClient 处理响应数据
  • 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
  • 被一个人影响情绪是爱吗?这 3 个真相越早明白越好
  • AI面经总结-试读
  • 深度解析六大AI爬虫工具:crawl4ai、FireCrawl、Scrapegraph-ai、Jina、SearXNG、Tavily技术对比与实战指南
  • COT思维链:SequentialChain 方法有哪些参数;优化后的提示词
  • ES面试题系列「一」
  • MySQL的索引分类
  • 软件体系结构(Software Architecture)
  • IDEA:如何设置最上面菜单栏一直显示出来
  • 图片转ICO图标工具
  • 一个网球新手的学习心得
  • 单链表设计与实现
  • 锁相放大技术:从噪声中提取微弱信号的利器
  • C PRIMER PLUS——第9节:动态内存分配、存储类别、链接和内存管理
  • 程序中的内存从哪里来?
  • arctan x 导数推理
  • Java 1.8(也称为Java 8)
  • 4.4 os模块
  • MySql事务索引
  • 图灵奖获得者经典论文系列(1969):迈向人工智能的步伐(马文·明斯基)
  • 2023 河南ccpc
  • Python与矢量网络分析仪3671E:通道插损自动化校准(Vscode)
  • AI(学习笔记第三课) 使用langchain进行AI开发(2)
  • VSCode1.101.0便携版|中英文|编辑器|安装教程
  • 大模型项目:普通蓝牙音响接入DeepSeek,解锁语音交互新玩法
  • 【React中useRef钩子详解】
  • 《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例