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,对类 ...
随机推荐
- Windows 下Python操作MySQL
1.环境要求(Win7 X64): python 2.7, MySQL-python-1.2.3.win-amd64-py2.7 :http://www.codegood.com/download/1 ...
- 2011年-CUshell编程大赛
今天群里有人在做练习时遇到一个问题,$0中的分隔符使用OFS没有成功作用,遂查到这个问题,留作备忘查看 http://bbs.chinaunix.net/thread-2319120-1-1.html
- 大坑!常被忽视又不得不注意的小细节——%I64,%lld与cout(转载)
原地址:http://blog.csdn.net/thunders01/article/details/38879553 刚刚被坑完,OI一年了才知道%I64和%lld有区别(做题会不会太少),lon ...
- EntityFramework-DBFirst-重新生成后写的验证消失(解决办法)
1.这是EF生成的类: namespace PMS.DataProvider.EntityFramework { using System; using System.Collections.Gene ...
- 【实用技巧】文件MD5修改方法
方法一 利用md5修改器 更新日志:2011-10-6 22:00修正对于路径中存在空格修改无效的bug2011-10-6 20:17更新:1.回归简约界面2.直接拖拽即可捕获地址3.一键修改文件 ...
- 精确到秒的JQuery日期控件
项目中需要用到精确到秒的日期控件,到网上搜了一下,发现有一个JQuery控件可以实现该功能---TimerPicker.但是官网上没有提供该控件的完整Demo,而且没有提供汉化包,所以自己汉化了一下, ...
- 《深入理解javascript原型和闭包系列》 知识点整理
深入理解javascript原型和闭包系列 对原型和闭包等相关知识的讲解,由浅入深,通俗易懂,每个字都值得细细研究. 一.一切都是对象 1. typeof操作符输出6种类型:string boolea ...
- 上次的AJAX定时刷新多ID不正确,这次请教了高手之后补全
关键是setInterval无法传递参数,所以用了匿名函数再包裹一下就好了. //重置发布进度 function resetPercent(id_data){ $.ajax({ url:'/autod ...
- 如何将Springside4项目转成Eclipse项目
1)下载springside4 官网地址 http://www.springside.org.cn/download.html 2)运行CMD,进入 C:\Documents and Settings ...
- Django单元测试(一)
Django测试框架非常简单,首选方法是使用python标准库中的unittest模块. Writing tests Django的单元测试使用python的unittest模块,这个模块使用基于类的 ...