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的精髓,以后会做进一步的讨论
Java笔记(十五)……面向对象IV多态(polymorphism)的更多相关文章
- Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)
Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- “全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十五章:Unicode与转义字符
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十五章:流程控制语句中循环语句while
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- python笔记十五(面向对象及其特性)
一.面向对象: class(类):一类拥有共同属性对象的抽象:定义了这些对象的属性和方法object(对象):是一个类实例化后的实例,类必须经过实例化才可以在程序中调用: 由于之前学习过java,对类 ...
随机推荐
- Linux学习笔记2
1.系统引导配置文件 # vi /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm. ...
- mysql Error Handling and Raising in Stored Procedures
MySQL的存储过程错误捕获方式和Oracle的有很大的不同. MySQL中可以使用DECLARE关键字来定义处理程序.其基本语法如下: DECLARE handler_type HANDLER FO ...
- mysql 远程连接 2003 Can't connect to MySQL server (10060)
mysql server 端的端口被防火墙挡出,没有开放
- 组态王6.55WEB全新发布步骤
转载请... 算了 估计没有人转..自己留着看 目的: 本教程通过组态王6.55实现一个WEB服务器和一个WEB画面的客户端,总共两个工程.服务器工程名为 Server , 客户点为 Client.S ...
- Java集合Map接口与Map.Entry学习
Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...
- SDC(1)–Hold Time
从以下两个论点触发可能会使Hold Time的计算理解起来更加容易: (1) H = SU – 1 ; (2) Hold Check的目的是确保Source Clock在某个边沿打出数据时,该数据不会 ...
- CODEVS 3286 火柴排队
[题目描述 Description] 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ,其中 ai表示 ...
- POJ2209+水题!
#include<stdio.h> #include<math.h> ]; int main(){ int n,m; ){ ;i<n;i++ ) scanf(" ...
- MS提供的虚拟机IE测试
https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
- 重温XML
关于什么是XML,以及XML有什么作用,网络上很多,我就在这里不班门弄斧,写博客,是我的一个习惯,究其内容无非个人情感,心得体会,转载,技术相关的,或者一时心血来潮的个人之谈,但是我是一个小心翼翼的人 ...