09 多态
2019-05-08 07:31:06来源:博客园 阅读 ()
1 多态
1.1 为什么要使用多态?
软件架构过程中,有一个开闭原则:对修改关闭,对扩展开放。
当我们需要升级业务时,业务的拓展不应该导致程序或者程序架构做过大调整。
1.2 多态
1.2.1 多态的概念
生活中,存在这种现象
同一个人拍照,由于选用的拍照设备不同,产生的照片不同。
同一事物,由于条件不同,产生结果也不同。
多态就是事物呈现的多种状态。
在程序中,多态是指
多态:同一个引用类型,使用不同的实例而执行不同操作
public class Test01 { public static void main(String[] args) { // 多态:同一引用类型,不同实例,执行结果不同 // java中的多态要求:父类类型引用子类对象 Animal animal = null; animal = new Person(); animal.sleep(); animal = new Fish(); animal.sleep(); } }
总结:
[1] 多态是指 同一引用类型,由于实例化的实例不同,导致对同一方法的执行结果不同。
同: 同一引用类型
不同: 实例化的实例
同:同一方法,该方法一般都会被重写。
不同: 执行结果不同
[2] java多态要求一定是父类引用=子类对象
父类类型 父类对象 = new 子类类型()
1.1.1 多态的表现形式
[1] 本质:父类引用子类对象
[2] 父类对象作为方法形参
public void feed(Pet pet) { System.out.println("主人在喂" + pet.getName()); pet.eat(); }
[3]父类作为方法返回值实现多态
public Pet getPet(int type) { Pet pet = null; switch(type) { case 1:{ pet = new Dog();break; } case 2:{ pet = new Penguin();break; } case 3:{ pet = new Cat();break; } } return pet; }
1.1 多态中类型转换
1.1.1 自动类型转换
子类可以无条件转换为父类类型,也称为向上类型转换
父类类型 父类引用 = 子类对象
1.1.2 强制类型转换
当父类想调用子类特有方法时,一定要进行强制类型转换,也称为向下类型转换
子类类型 子类对象= (子类类型)父类对象
Dog dog = (Dog)pet;
Penguin penguin = (Penguin)pet;
注意:强制类型转换有个前提:一定要转换为父类对象引用的实际的子类类型。
obj instanceof Class/Interface 判断对象是否是类或者接口的实例。
public class Test01 { public static void main(String[] args) { Dog dog = new Dog(); System.out.println(dog instanceof Dog); System.out.println(dog instanceof Pet); System.out.println(dog instanceof Object); } }
1.1 总结
多态的好处:
提高了程序的可拓展性和可维护性。
多态三种表现形式
[1] 父类引用子类对象
[2] 父类作为方法形参
[3] 父类作为方法返回类型
多态发生的条件
[1] 必须有继承
[2] 有重写/实现
[3] 父类引用子类对象
多态过程中,需要调用子类特有的方法
类型转换/instanceof
多态的分类(C)
编译时多态:指重载
运行时多态:多态,具体到运行时才知道父类对象引用的是哪个子类。
思考题:java是如何实现运行时多态?
动态绑定和静态绑定
1.2 调试技巧
断点:程序执行时的停止的点。
step over: 单步执行。执行一句当前的代码
step into: 进入方法体继续执行。
原文链接:https://www.cnblogs.com/aknife/p/10819697.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Nacos入门 2020-04-18
- 错误日志告警实战 2020-04-10
- 【从零开始学Java笔记】多态 2020-04-07
- 面向对象编程基础 2020-04-04
- Java基础(五) 2020-04-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash