黑马程序员——面向对象_多态
来源:互联网 发布:北京游戏外包公司知乎 编辑:程序博客网 时间:2024/05/16 11:05
------- android培训、java培训、期待与您交流! ----------
- 多态的前提
2.有方法重写
3.有父类引用指向子类对象
- 多态分类
2. 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(平时所说的多态一般就是指运行时多态)
- 多态的好处
2.可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作
3.接口性:多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性:它在应用中体现了灵活多样的操作,提高了作用效率。
5.简化性:多态简化对应用软件代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
- 小结
注意:如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下:
this.show(O)本类方法,本类参数
super.show(O)父类方法,本类参数
this.show((super)O) 本类方法,O的父类参数
super.show((super)O) 父类方法,O的父类参数
class Demo {public static void main(String[] args) {getEat(new Dog());//运行期间确定引用变量调用<span style="white-space: pre;"></span>//具体类的方法getEat(new Cat());Animal a = new Cat();//父类引用指向子类对象}public static void getEat(Animal a) {//方法中的引用参数变量编译时并不确定指向哪个子类a.eat();}//不使用多态时指定具体的子类调用其方法,增加了代码量并且灵活性不高public static void getEat(Dog d) {d.eat();}public static void getEat(Cat c) {c.eat();}}class Animal {public void eat(){}}class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}}class Dog extends Animal {public void eat() {System.out.println("狗吃骨头");}}
class Demo {public static void main(String[] args) {getEat(new Dog());//运行期间确定引用变量调用具体类的方法getEat(new Cat());Animal a = new Cat();//父类引用指向子类对象}public static void getEat(Animal a) {//方法中的引用参数变量编译时并不确定指向哪个子类a.eat();}//不使用多态时指定具体的子类调用其方法,增加了代码量并且灵活性不高public static void getEat(Dog d) {d.eat();}public static void getEat(Cat c) {c.eat();}}class Animal {public void eat(){}}class Cat extends Animal {public void eat() {System.out.println("猫吃鱼");}}class Dog extends Animal {public void eat() {System.out.println("狗吃骨头");}}
0 0
- 黑马程序员_面向对象—>多态
- 黑马程序员_面向对象—>封装
- 黑马程序员_面向对象—>继承
- 黑马程序员_面向对象—>异常
- 黑马程序员——Java 面向对象_多态
- 黑马程序员——面向对象_多态
- 黑马程序员_面向对象_多态
- 黑马程序员_面向对象--继承、多态
- 黑马程序员_<<面向对象(多态)---03>>
- 黑马程序员_java_面向对象_多态
- 黑马程序员_面向对象(多态)
- 黑马程序员_面向对象(多态)
- 黑马程序员_面向对象_多态_内部类
- 黑马程序员——java基础_面向对象
- 黑马程序员_学习笔记——面向对象
- 黑马程序员——面向对象_基础(1)
- 黑马程序员——面向对象_基础(2)
- 黑马程序员——第一篇_面向对象
- Spring 配置log4j和简单介绍Log4J的使用
- 封闭iOS与开放Android的发展看移动未来方向
- 开发必会的 Linux & Mac 命令
- nginx如何响应客户端
- 攫取字符串
- 黑马程序员——面向对象_多态
- linux下如何处理文件名含括号的文件
- 第十六周知原理
- nginx如何读取缓存文件
- 56: Recv failure: Connection was reset和55错误解决办法
- Maven Pom文件的编写
- 编程片段
- 合成存取方法 @property @synthesize
- 【Linux】线程互斥