多态之父类引用指向子类对象
首先,这是多态的知识,多态有三要素:
继承 , 重写父类的方法 , 父类引用指向子类对象
以下是我对于多态的一些理解,如有不当,还请指正!
一,多态的概念与特征;
1.什么多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,
如这里定义一个
class Animal{public void shout(){System.out.println("发出叫声");}public void feed(Animal animal){System.out.println("喂食中...");}
}class Cattle extends Animal{@Overridepublic void shout() {System.out.println("哞哞哞");}@Overridepublic void feed(Animal animal) {System.out.println("喂牛中....");}
}class Dog extends Animal{@Overridepublic void shout() {System.out.println("汪汪汪");}@Overridepublic void feed(Animal animal) {System.out.println("喂狗中....");}
}class Birds extends Animal{@Overridepublic void shout() {System.out.println("叽叽叽");}@Overridepublic void feed(Animal animal) {System.out.println("喂鸟中....");}
}
这就是多态!!!
多态的优点:
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
下面来看一些例子:
还是上面的代码:
public static voidqwerr main(String[] args){Animal animal1 = new Cattle();Animal animal2 = new Dog();Animal animal3 = new Birds();animal1.feed(animal1);animal2.feed(animal2);animal3.feed(animal3);animal1.shout();animal2.shout();animal3.shout();
首先可以来看看上面这部分代码的执行结果是什么?
结果:
喂牛中…
喂狗中…
喂鸟中…
哞哞哞
汪汪汪
叽叽叽
首先这里的代码中很明显使用了父类对象指向子类引用。那么问题来了。这里明明是使用的是父类的引用调用的方法。而调用的结果显示却是调用了子类的方法?
这就是多态最重要的特性,也可以说这就是多态(Polymorphic)。
Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。
为什么要使用父类引用指向子类对象?
假如我们要将
Animal animal1 = new Cattle();
改为:
Animal animal1 = new Dog;
这种写法就可以在程序的可扩展性,可替换性,灵活性,类型之间的耦合性…都比
Cattle animal1 = new Cattle();这种写法有所提高,尤其是animal1被大量引用之后这种写法能更加易于扩展。这种思想叫做面向接口编程。
多态之父类引用指向子类对象相关推荐
- java -----多态:父类引用指向子类对象
生活中的人物视角 程序中的多态 概念:父类引用指向子类对象,从而产生多种形态 一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定 比 ...
- Java 理解点整理:父类引用指向子类对象(多态)
前言 本章主要对"Java的多态"做一个简单的说明. 1.父类引用指向子类对象代码演示 1. 代码:父类Animal,子类Dog,子类Cat//父类:动物 public class ...
- Java多态-如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
- java多态 成员访问特点(父类引用指向子类对象)
>父类 子类 package com.dareway.demo;public class Father {public String index="fatherLogo"; ...
- java父类引用子类_java多态,如何理解父类引用指向子类对象
要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...
- Java多态 父类引用指向子类对象
原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...
- 多态的理解(父类引用指向子类对象)
多态: 要有继承,方法的重写,父类引用指向子类对象 ?疑问:Animal cat = new Cat(); //向上转型. 父类引用指向子类对象,该引用不能再访问子类 ...
- java子类引用指向父类对象_Java多态 父类引用指向子类对象
Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father c = new Child() 在c的 ...
- java 父类引用子类对象_java多态,如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 C ...
最新文章
- java中的char类型
- win oracle 重启命令,Windows下命令行如何启动Oracle10g?
- 基于Socket的java网络编程
- 美国警察开特斯拉追疑犯,时速飙到193公里,然后发现没电了...
- android java 面试题,Android java 高级面试题库
- QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入
- 理解PHP5中static和const关键字
- python遇到的问题
- 数十亿个 Wi-Fi 设备存在缺陷,通信易被窃听!
- python环境准备_一键实现Python环境准备
- 生科实验室仪器维护保养,一篇就够了!
- 浅谈车联网与大数据分析
- MacBook 无法连接公司内网服务器
- js实现下载文件流图片
- 聊聊SQL语句中 DDL 、DML 、DQL 、DCL 分别是什么
- 最早成立的计算机学校,中国最早的四大工学院
- 有没有支持P2P架构的直播技术?
- oracle分区表的优势
- ARouter 源码解析(1.5.2 版本)
- Vue 实现批量审核功能实例完整代码(表格批量操作)(Vue开发一)