博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础--面向对象编程4(多态)
阅读量:5294 次
发布时间:2019-06-14

本文共 1759 字,大约阅读时间需要 5 分钟。

1.多态的概念

多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的。

同一个类型:一般指父类

不同的实例:不同的子类实例

执行结果不同:针对同一方法执行的结果不同

1 package cn.sxt05; 2  3 public class Test01 { 4     public static void main(String[] args) { 5          6         // 多态 7         // 同一引用类型 8         Pet pet = null; 9         // 父类引用 引用 子类对象10         pet = new Dog("二狗",100,0,"土狗");11         // 呈现多态12         pet.eat();13         14         pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);15         // 呈现多态16         pet.eat();17     }18 }

2.实现多态的步骤

[1] 编写父类

[2] 编写子类,子类一定要重写/实现父类的方法

[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

3.多态的实现形式

[1]父类类型引用子类对象(本质)

如下代码所示,pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。

1 // 多态2 // 同一引用类型3 Pet pet = null;4 // 父类引用 引用 子类对象5 pet = new Dog("二狗",100,0,"土狗");6 // 呈现多态7 pet.eat();

[2]父类作为方法形参实现多态

1 public void feed(Pet pet) {2         System.out.println(this.getName() + "正在喂" + pet.getName());3         pet.eat();4     }

[3]父类作为方法的返回值实现多态

1 public Pet adoptPet(int type) { 2         Pet pet = null; 3         if(1 == type) { 4             pet = new Dog(); 5         }else if(2 == type) { 6             pet = new Penguin(); 7         }else if(3 == type){ 8             pet = new Cat(); 9         }10         return pet;11     }

4.多态类型转换

在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。

在引用数据类型转换过程中,自动类型转换也称向上类型转换,子类可以自动转换成父类。

1 Pet pet = null;2 pet = new Dog();

强制类型转换也称向下类型转换,父类可以强制转换成子类。

子类类型 引用 = (子类)父类对象,如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型。

1 public void play(Pet pet) {2         if(pet instanceof Dog) {3             Dog dog = (Dog) pet;4             dog.catchFlyDisc();5         }else if(pet instanceof Penguin) {6             Penguin penguin = (Penguin) pet;7             penguin.swimming();8         }9     }

 

转载于:https://www.cnblogs.com/WhiperHong/p/10758960.html

你可能感兴趣的文章
使用onclick跳转到其他页面/跳转到指定url
查看>>
【转载】测试计划模板
查看>>
pandas 修改指定列中所有内容
查看>>
ubuntu18.04 复制或剪切某文件夹下的前x个文件到另一个文件夹下
查看>>
input的value中有特殊字符
查看>>
字符串压缩
查看>>
用Lua定制Redis命令
查看>>
小程序-canvas在IOS手机层级最高无法展示问题
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
解决win8使用内置管理员不能打开应用商城、天气等问题
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
globalization与全球化
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
关于在Idea 创建Maven项目时,无法在source文件下创建servlet文件问题解决!
查看>>
对 HTTP 304 的理解
查看>>
深入理解css中的margin属性
查看>>
C++ 删除字符串的两种实现方式
查看>>
电容选型
查看>>