多态:

同一个实体同时具有多种形式

编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定
如果编译时类型和运行时类型不同,就出现多态
例:
 1    class Preson{
 2 }
 3    class Teacher extends Preson{
 4 }
 5
 6 public class Demo {
 7     public static void main(String args[]){
 8             //这行代码就会产生多态
 9             Preson p = new Teacher();
10     }
11 }

实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
多态的作用:
把不同的子类对象当作父类类型来看,可以屏蔽不同子类对象之间的差异,写出通用代码,做出通用编程,以适应需求的不断变化
继承关系式多态产生的前提
例:
 1     //鸟类
 2 class Brid{
 3  public void eat() {
 4   System.out.println("一般鸟类都吃虫子");
 5  }
 6
 7 }
 8 //麻雀
 9 class Sparrow extends Brid{
10  public void eat(){
11   System.out.println("我要吃虫子");
12  }
13 }
14 //老鹰
15 class Eagle extends Brid{
16  public void eat(){
17   System.out.println("我是空中霸主,我要吃肉");
18  }
19 }
20 //觅食
21 class Foraging{
22  /*public void feed(Sparrow sparrow){
23   sparrow.eat();
24  }
25  public void feed(Eagle eagle){
26   eagle.eat();
27  }
28  */
29  /**
30   *上面这两个方法可以改进为下面这一个方法 ,利用多态可以达到一样的效果
31   */
32  //直接把父类(鸟类)传进去
33  public void feed(Brid brid){
34   brid.eat();
35  }
36 }
37 public class TestDemo {
38  public static void main(String[] args) {
39   Foraging foraging = new Foraging();
40
41   Sparrow sparrow = new Sparrow();
42   /**
43    * 这行代码就体现了多态
44    *
45    * 运行时根据实际的类型寻找它实际类型的方法
46    */
47   foraging.feed(sparrow);
48
49   Eagle eagle = new Eagle();
50   foraging.feed(eagle);
51
52   /**
53    * Eagle eagle = new Eagle();
54    *
55    * Dog eagle = new Eagle();
56    *
57    * Sparrow sparrow = new Sparrow();
58    *
59    * Dog sparrow = new Sparrow();
60    *
61    *
62    * 也可以改变声明类型,功能的实现也不会变
63    */
64
65  }
66 }

分类:
分类时多态,方法重载
运行时多态,方法重写
静态方法不能被重写,但能被子类继承。
因为方法的重写和对象有关,而static修饰的方法和对象无关
引用类型转换:
向上转型:小--------->大 (子类---------->父类)自动转换
把子类对象赋给父类变量
向下转型:大--------->小(父类----------->子类)强制转换
把父类对象强制转换成子类对象
强转之前一般都要先判断(instanceof)

对象类型的判断:instanceof
格式:对象  instanceof 类
表示判断对象是否属于这个类的类型
返回结果:Boolean型
ps:若要用来判断的对象与该类型没有继承关系,就不能使用instanceof
多态时方法的调用:
当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况)
此时该变量不能在访问子类中自己特有的字段和方法
若子类重写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法
组合:
一个类里包含另外一个类的引用,这种关系我们可以称为包含关系,也可称为”has a“的关系

转载于:https://www.cnblogs.com/Essence/p/3975979.html

面向对象三大特征之多态——Java笔记(七)相关推荐

  1. Cris 的Python笔记(十一):面向对象三大特征之多态

    ''' Python 的多态:一个对象可以以不同的形态去呈现,实现方式相比 Java更加简单 因为动态语言的特点,Python 无法实现在代码指向前对方法参数进行检查,所以只要满足指定方法体的要求,任 ...

  2. JAVA面向对象三大特征之一多态

    一.什么是多态? 同类型的对象,变现出的不同形态. 二.多态的表现形式 父类类型   对象名称   =   子类对象: 三.多态的前提 a.有继承/实现关系 b.有父类引用指引子类对象     例子: ...

  3. 实践解读丨Python 面向对象三大特征之多态

    摘要:多态从字面意思上看就是多种形态,在我们python的面向对象里就是不同的对象在接收相同方法或者函数时会产生不同的行为,也就是说,每个对象可以用自己的方式去响应共同的函数,不同的方式实现不同的结果 ...

  4. 面向对象三大特征之多态

    实现多态的三大要素 1.继承关系的父类跟子类 2.子类重写父类的方法 3.父类的引用指向子类的对象 多态的类型 1.向上转型--子类到父类的转换:自动类型转换 语法:父类名 引用变量名=new 子类名 ...

  5. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态

    ###1.内存管理:由JVM来管理的------了解 1)堆: 1.1)存储new出来的对象(包括实例变量) 1.2)垃圾:没有任何引用指向的对象 垃圾回收器(GC)不定时到内存中清扫垃圾, 回收过程 ...

  6. Java面向对象三大特征---继承

    系列文章目录 Java面向对象三大特征-多态 Java面向对象三大特征-封装 文章目录 系列文章目录 前言 一.概念 二.举例说明 三.语句格式 三.为何要使用继承 四.super与this关键字 五 ...

  7. Java面向对象三大特征的理解

    面向对象三大特征的理解 初始理解 封装 继承 多态 初始理解 其实这些知识很早就有接触,而且一些概念也牢记于心了.自己叙述面向对象的特征会是这样的: 面向对象的三大特征是封装.继承和多态.封装是对代码 ...

  8. 面向对象三大特征(封装、继承、多态)详解

    面向对象的三大特征 万物皆可归类,类是对于世界事物的高度抽象,不同的事物有不同的关系:一个类自身与外界的封装关系:一个父类与子类的继承关系:一个类和多个类的多态关系. 万物皆对象,对象是具体的世界事物 ...

  9. JAVA面向对象三大特征:

    JAVA面向对象三大特征: 1.封装 (英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的 ...

  10. Java的OOP三大特征之一——多态

    OOP(面对对象)三大特征之一--多态 What:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用 ...

最新文章

  1. Java 中文转拼音
  2. 单件模式Singleton Pattern
  3. linux shell 指定端口 杀进程 结束进程
  4. 微服务探索与实践—总述
  5. pem格式证书编码 x509_证书编码格式
  6. Tensorflow ExponentialMovingAverage 详解
  7. C++实践参考——摩托车继承自行车和机动车
  8. DataUml Design 介绍11 - DataUML 1.5版本功能-支持无Oracle客户端
  9. bzoj 1415: [Noi2005]聪聪和可可
  10. Eclipse集成Git插件及使用
  11. 数学建模四大模型总结
  12. 温度补偿计算公式_基于温度压力补偿计算的燃气表计量方法与流程
  13. 喝豆浆对身体都有哪些好处?
  14. 安卓设备脱离pc自动化测试,Termux模拟器下python+uiautomator2的环境设置。本人亲测,踩坑总结。
  15. XAML中的Style
  16. 什么是拖延症 ----- 时间管理:终结拖延症小技巧之高效利用时间
  17. KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
  18. 如何制作一个漂亮的二维码 QRBTF
  19. 诗词欣赏,沁园春政治与经济
  20. thinkpad 重装--AHCI 导致系统蓝屏---迅盘

热门文章

  1. java集合和数组互转
  2. 百分点制造行业大数据解决方案
  3. JavaScript文本收缩展开 showdetail
  4. Python 实现数据结构中的单链表,循环单链表,双链表
  5. 剑指offer:删除链表中重复的节点
  6. 【Prufer Sequence +简单排列组合】bzoj 1005: [HNOI2008]明明的烦恼
  7. 关于异常你还不知道的
  8. 封装常用的js(base.js)——【05】自定义弹出框.封装水平垂直居中center(),和resize() ....
  9. linux 监控系统资源-内存
  10. iOS--资料--类目Category收集