首先,这是多态的知识,多态有三要素:
继承 , 重写父类的方法 , 父类引用指向子类对象
以下是我对于多态的一些理解,如有不当,还请指正!
一,多态的概念与特征;
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("喂鸟中....");}
}

这就是多态!!!

多态的优点:

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

下面来看一些例子:
还是上面的代码:

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被大量引用之后这种写法能更加易于扩展。这种思想叫做面向接口编程

多态之父类引用指向子类对象相关推荐

  1. java -----多态:父类引用指向子类对象

    生活中的人物视角 程序中的多态 概念:父类引用指向子类对象,从而产生多种形态 一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定 比 ...

  2. Java 理解点整理:父类引用指向子类对象(多态)

    前言 本章主要对"Java的多态"做一个简单的说明. 1.父类引用指向子类对象代码演示 1. 代码:父类Animal,子类Dog,子类Cat//父类:动物 public class ...

  3. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

  4. java多态 成员访问特点(父类引用指向子类对象)

    >父类 子类  package com.dareway.demo;public class Father {public String index="fatherLogo"; ...

  5. java父类引用子类_java多态,如何理解父类引用指向子类对象

    要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...

  6. Java多态 父类引用指向子类对象

    原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...

  7. 多态的理解(父类引用指向子类对象)

    多态: 要有继承,方法的重写,父类引用指向子类对象           ?疑问:Animal cat = new Cat(); //向上转型.        父类引用指向子类对象,该引用不能再访问子类 ...

  8. java子类引用指向父类对象_Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

  9. java 父类引用子类对象_java多态,如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

最新文章

  1. java中的char类型
  2. win oracle 重启命令,Windows下命令行如何启动Oracle10g?
  3. 基于Socket的java网络编程
  4. 美国警察开特斯拉追疑犯,时速飙到193公里,然后发现没电了...
  5. android java 面试题,Android java 高级面试题库
  6. QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入
  7. 理解PHP5中static和const关键字
  8. python遇到的问题
  9. 数十亿个 Wi-Fi 设备存在缺陷,通信易被窃听!
  10. python环境准备_一键实现Python环境准备
  11. 生科实验室仪器维护保养,一篇就够了!
  12. 浅谈车联网与大数据分析
  13. MacBook 无法连接公司内网服务器
  14. js实现下载文件流图片
  15. 聊聊SQL语句中 DDL 、DML 、DQL 、DCL 分别是什么
  16. 最早成立的计算机学校,中国最早的四大工学院
  17. 有没有支持P2P架构的直播技术?
  18. oracle分区表的优势
  19. ARouter 源码解析(1.5.2 版本)
  20. Vue 实现批量审核功能实例完整代码(表格批量操作)(Vue开发一)

热门文章

  1. DOS上登陆FTP的命令和步骤(ftp命令全集)
  2. 机制检验、异质性检验、调节效应
  3. OCR-文本检测后的文字纠正
  4. QT+讯飞智能语音在线识别demo,录音识别
  5. 计量经济学笔记5-Eviews操作-异方差的检验与消除(White检验与加权最小二乘)
  6. memset 和 bzero的效率测试。
  7. Java Jar包介绍
  8. CAD中如何布置火灾探测器?消防探测器范围计算
  9. MySQL系列----创建函数
  10. 避免使用隐式类型转换