概述

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

例:动物中猫,狗。

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

猫 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. ACE 6.2.0 win7_64 编译

    Windows平台 ~ Microsoft Visual Studio 1)        下载ACE源码 ACE官方网址:http://www.cs.wustl.edu/~schmidt/ACE.h ...

  2. css文本换行你所不知道的技巧

    前言:这是最近翻译的一篇文章 我在header标签开头忘里边加入一个span标签的时候,有一点小问题.我总是想确保在span标签之前能够换行.明确地讲,在标签前边加入<br> 并没有什么错 ...

  3. PHPExcel说明

    下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...

  4. 用javascript快速清空你的人人时间轴、状态和分享

    博客已经迁移到www.imyzf.com,本站不再更新,请谅解! 现在玩人人的人越来越少了,很多人担心不玩以后东西放上面不安全..我也有同样的想法,但是手动删除上百条东西,太累了,于是写了些javas ...

  5. JAVA获取当前日期以及将字符串转成指定格式的日期

    /* * To change this template, choose Tools | Templates * and open the template in the editor. */ pac ...

  6. MVC-Model数据注解(三)-Remote验证的一个注意事项

    首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制,这个可以通过StringLength特性来解决:同时还需要验证用户名不能重复,这个就需要 ...

  7. 背景CSS

    .op_weather4_twoicon_day:hover .op_weather4_twoicon_hover { background-image: -webkit-linear-gradien ...

  8. tortoisesvn的安装与使用

    1.下载安装文件,我用的是1.6.同时可以下载一个中文的安装包. 2.我在F盘建立了一个文件夹tortoisesvn,专门用来放置版本目录文件.然后右键这个文件夹,选择tortoisesvn-> ...

  9. 《php和mysql web开发》读书笔记

    总算是强迫自己把第一篇给看完了,在这里做一个小结,将一些知识点记录下来. 一.第一篇 使用PHP 1.php中的注释.php支持c.c++和shell脚本风格注释 /**/多行注释  //单行注释   ...

  10. HDU2167+状态压缩DP

    状态压缩dp 详见代码 /* 状态压缩dp dp[ i ][ j ]:第i行j状态的最大和 dp[i][j] = max( dp[i-1][k]+sum[i][j] ); 题意:给定一个N*N的方格, ...