• Java笔记(十五)……面向对象IV多态(polymorphism)


    概述

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

    例:动物中猫,狗。

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

    猫 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的精髓,以后会做进一步的讨论

  • 相关阅读:
    [bzoj4942][noi2017]整数【线段树】
    面向对象的几个函数
    各种编码方式及其来历
    java nio中,HeapByteBuffer与DirectByteBuffer的区别
    volatile关键字的作用
    git常用命令
    关于git的一些零碎知识
    rm(操作系统的删除文件)与git rm的区别
    php的数组
    SQL Server中模式(schema)、数据库(database)、表(table)、用户(user)之间的关系
  • 原文地址:https://www.cnblogs.com/ShawnWithSmallEyes/p/3375284.html
Copyright © 2020-2023  润新知