概述

定义:某一类事物的多种存在形态。

例:动物中猫,狗。

猫这个对象对应的类型是猫类型

猫 x = new 猫();

同时猫也是动物中的一种,也可以把猫称为动物。

动物 y = new 猫();

动物是猫和狗具体事物中抽取出来的父类型。

父类型引用指向了子类对象。

程序中体现:

父类或者接口的引用指向或者接收自己的子类对象。

好处和作用:

多态的存在提高了程序的扩展性和后期可维护性

前提:

  • 需要存在继承或者实现关系
  • 要有覆盖操作

多态的特点

成员函数:

编译时:要查看引用变量所属的类中是否有所调用的成员。

在运行时:要查看对象所属的类中是否有所调用的成员,其实这里肯定是有的,因为编译通过,证明一定是父类中的方法,所以子类肯定存在相同的方法。

成员变量:

只看引用变量所属的类。

多态的应用

主板与PCI例子

   1: /*

   2: 电脑运行实例

   3: */

   4:  

   5: interface PCI

   6: {

   7:     public void open();

   8:     public void close();

   9: }

  10:  

  11: //网卡

  12: class NetBoard implements PCI

  13: {

  14:     public void open()

  15:     {

  16:         System.out.println("netboard open!");

  17:     }

  18:     public void close()

  19:     {

  20:         System.out.println("netboard open!");

  21:     }

  22: }

  23: //声卡

  24: class SoundBoard implements PCI

  25: {

  26:     public void open()

  27:     {

  28:         System.out.println("soundboard open!");

  29:     }

  30:     public void close()

  31:     {

  32:         System.out.println("soundboard close!");

  33:     }

  34: }

  35: class MainBoard

  36: {

  37:     private PCI[] pArr;

  38:     MainBoard(PCI... pArr)

  39:     {

  40:         this.pArr = pArr;

  41:     }

  42:     

  43:     public void open()

  44:     {    

  45:         //启动具有PCI接口的所有设备

  46:         openPCI();

  47:         System.out.println("mainboard run!");

  48:     }

  49:     public void openPCI()

  50:     {

  51:         for(PCI p : pArr)

  52:             if(p != null)

  53:                 p.open();

  54:     }

  55:     public void closePCI()

  56:     {

  57:         for(PCI p : pArr)

  58:             if(p != null)

  59:                 p.close();

  60:     }

  61:     public void close()

  62:     {

  63:         //关闭具有PCI接口的所有设备

  64:         closePCI();

  65:         System.out.println("mainboard close!");

  66:     }

  67: }

  68: class PCIDemo 

  69: {

  70:     public static void main(String[] args) 

  71:     {

  72:         PCI[] pArr = {new NetBoard(),new SoundBoard()};

  73:  

  74:         MainBoard m = new MainBoard(pArr);

  75:         

  76:         m.open();

  77:         m.close();

  78:  

  79:     }

  80: }

多态的设计是Java的精髓,以后会做进一步的讨论

Java笔记(十五)……面向对象IV多态(polymorphism)的更多相关文章

  1. Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)

    Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...

  2. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  3. “全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. “全栈2019”Java第十五章:Unicode与转义字符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第二十五章:流程控制语句中循环语句while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  7. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  8. java面向对象之 多态 Polymorphism

    多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...

  9. python笔记十五(面向对象及其特性)

    一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...

随机推荐

  1. php用户验证代码的简单例子

    发布:sunday01   来源:net     [大 中 小] 分享一个简单的php用户验证代码,适合初学的朋友参考,主要学习$_post传递数据及isset检测变量的方法. php简单用户验证代码 ...

  2. Angular ng-repeat

    <tr ng-repeat="(key,item) in tableData"> <td class="check hidden-xs"> ...

  3. m2e插件的新下载地址

    今天在按照<Maven实战>这本书给eclipse配置maven的m2eclipse插件的时候发现,书中写的老的下载地址http://m2eclipse.sonatype.org/site ...

  4. 【hibernate】spring+ jpa + hibername 配置过程遇到的问题

    org.springframework.data.jpa.domain.support.AuditingEntityListener Auditing: 审计:查账Hades:Hades是一个开源库, ...

  5. 刷漆(Codechef October Challenge 2014:Remy paints the fence)

    [问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏, ...

  6. 敏捷开发的特点(转自MBAlib)

    敏捷开发的特点 敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征: (1)敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive). 这里说的预设 ...

  7. 敏捷开发的价值观(转自MBAlib)

    敏捷开发的价值观 实际上敏捷开发运动在数年前就开始了,但它正式开始的标志是2001年2月的“敏捷宣言”(Agile Manifesto),这项宣言是由17位当时称之为“轻量级方法学家”所编写签署的,他 ...

  8. java基础知识整理:

    一, Java中的继承: 1. final关键字(最终的,不可修改的不可变化的,可以修饰类,方法,变量等): 如果final修饰类的话,这个类不可以被继承: 如果修饰方法的话,这个方法不可以被子类覆盖 ...

  9. POJ 1404 I-Keyboard (DP)

    http://poj.org/problem?id=1404 题意 :手机上的要发短信的话,“我”字需要先按一下9键,再按3下6键,所以,现在想要重新布局每个键上的字母数,让最后的那个值最小,也就是说 ...

  10. php smarty insert用法

    insert用于模板中. 用法:{insert name="method_name"} 此时会寻找php文件中方法名为:insert_method_name的函数, 将其返回值作为 ...