`
wangminshe89
  • 浏览: 675906 次
文章分类
社区版块
存档分类
最新评论

面向对象之多态

 
阅读更多

多态(polymorphic)

定义:动态绑定(多态):在执行期间(不是编译期间)判断所引用对象的实际类型,根据实际类型调用其相应的方法。动态绑定帮助我们程序的可拓展性达到极致。同一类型的对象,在运行的时候表现出不同的形态。

实例理解:例如有一个打飞机的游戏,里面有飞机类、子弹类,原来的思考模式是当飞机出现的时候,调用飞机的自身画自己类,子弹出现的时候调用子弹类,当我们要增加坦克类时,也要进行判断。程序的可拓展性差。这时我们要这样考虑:声明一个游戏的父类,为他定义一个画的方法,无论是飞机、子弹、坦克还是其他的类出现都继承这个父类,然后重写自己画的方法。当要拿出来的时候,不需要判断了,直接调用画的方法。是谁出现就画谁。体现多态思想,系统的可拓展性好。

多态存在的必要条件:继承、重写、父类引用指向子类对象。

注意:

1、多态:父类型的引用可以指向子类的对象。或者接口类型的引用可以指向实现该接口类的实例。

关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。

2、例如体现多态的一行代码:

parent p=newchild();看p是什么类型的,就调用什么类型的方法,例如此行代码p属于parent类型,所以就会调用parent里面的方法,例如:p.sing();当使用多态调用方法时,首先检查父类中有没有sing()方法,如果没有则编译错误,如果有再去调用子类的sing()方法。

3、一共有两种类型的强制转换

a)向上类型转换:比如说将Cat转换为Animal,也就是说将子类转换为父类,对于向上类型转换,,不需要显示指定。

Eg:Animal animal=new Cat();

animal.Sing();

b)向下类型转换:比如说将Animal转换为Cat,也就是说将父类转换为子类,对于向下类型转换,需要显示指定。(必须使用强制类型转换)

Eg:Animal a=newCat();

Cat cat=(Cat)a;

cat.sing();

当使用子类特有的方法,父类不存在该方法,则需要使用强制类型转换。

/***

* 多态思想

* 首先知道三要素

* 1,继承 2,重写 3,父类对象指向子类对象

*

* 理解多态的优势。

* 我们要设计一些动物前,先设计动物的基本类

* 如Animal.我们设计好他的名字。和统一的叫声这个方法函数。

* 其次,我们开始单独设计每一种动物的特征

* 先设计Cat猫,他继承了动物的特征后,我们对猫的叫声重写一下。

* 注意重写 必须和父类方法一样。

* 同样,我们又写了狗Dog,bird鸟这两个方法,同时重写了他们的叫声。

*

* 这个时候,我们设计一个小女孩的类Lady。 我们开始设计她的名字,和她将使用的一个

* 对象 动物。

* 我们定义了她的构造方法,里面的参数有名字,和定义的动物对象。

* 同时,我们对他定义了一个方法,并且实现了调用该方法就可实现调用动物的这个叫声。

*

* 我们在主函数里面建立了Cat Dog 和Lady等实现类。

* 当我们调用Lady中调用哪个 动物类的时候,程序会自动找到与其对应的动物的实现方法。

* 这个就叫 多态。

* @author Administrator

*abstract 抽象

*抽象方法必须定义抽象类

*抽象方法只要定义不要实现

*抽象类不能被实力化

*子类抽象类必须被继承,子类抽象方法必须被重写

*/

abstract classAnimal {//定义抽象类

private String name;

Animal(String name) {this.name = name;}

/*

public void enjoy(){

System.out.println("叫声......");

}

*/

public abstract void enjoy();//定义抽象方法,也叫纯虚函数

}

class Cat extends Animal {

private String eyesColor;

Cat(String n,String c)

{super(n); eyesColor = c;}

public void enjoy() {

System.out.println("猫叫声......");

}

//public abstract void enjoy();

}

class Dog extendsAnimal {

private String furColor;

Dog(String n,String c) {super(n); furColor =c;}

public void enjoy() {

System.out.println("狗叫声......");

}

}

class Bird extendsAnimal {

Bird() {

super("bird");

}

public void enjoy() {

System.out.println("鸟叫声......");

}

}

class Lady {

private String name;

private Animal pet;//定义了动物的类 对象

Lady(String name,Animal pet) {//由于pet是动物的对象。而Cat Dog等也是从动物继承而来的

//所以,调用哪种动物,pet就自动传到哪个动物的类上

this.name= name; this.pet = pet;

}

public void myPetEnjoy(){pet.enjoy();}//自动识别方法的过程就叫多态

}

public classTestjava {

public static void main(String args[]){

Cat c = newCat("catname","blue");

Dog d = newDog("dogname","black");

Bird b = new Bird();

Lady l1 = new Lady("l1",c);

Lady l2 = new Lady("l2",d);

Lady l3 = new Lady("l3",b);

l1.myPetEnjoy();

l2.myPetEnjoy();

l3.myPetEnjoy();

//多态的好处在于,我们要增加不同的类或动物类型,那么,无需改动动物的大类。

//只要增加要的类,在主函数中调用就可以了。

}

}


分享到:
评论

相关推荐

    数据库管理工具:dbeaver-ce-23.1.5-macos-aarch64.dmg

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    一份关于信号与系统的大纲教程!!!!!!!!!!!!!

    一份关于信号与系统的大纲教程!!!!!!!!!!!!!

    【课件】7.5.1散列表的基本概念.pdf

    【课件】7.5.1散列表的基本概念

    【课件】8.7.4置换-选择排序.pdf

    【课件】8.7.4置换-选择排序

    Delphi 12 控件之unidac-10.2.1-d29pro.exe

    unidac_10.2.1_d29pro.exe

    基于STM32的微控制器的C++语言研究项目

    此代码是基于 C、C++ 语言的 stm32 为微控制器编写的。 代码包含单独的部分:main、ini、USART code_for_display。 ADC_ini(模数转换器)是关于初始化ADC的。每当您触发模拟输入以开始转换时,它都会对模拟输入进行采样。它执行一个称为量化的过程,以决定电压电平及其在输出寄存器中推送的二进制代码。 USART(通用异步接收器-发射器)是一种外围通信硬件设备,它允许计算机通过 wifi 或蓝牙与串行连接的设备进行同步和异步通信。 code_for_display部分是包含 7 段显示的代码。 main 初始化ADC_ini,USART,code_for_display并开始接收信息的循环,显示它,将其发送到另一个设备,重复

    数据库表结构同步工具.zip

    大学生数据结构学习笔记和资料大全!

    数据库管理工具:dbeaver-ce-23.2.1-x86-64-setup.exe

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    Android-Retrofit-Images在这个示例 Android 项目中

    Android-Retrofit-Images在这个示例 Android 项目中

    数据库管理工具:dbeaver-ce-23.0.2-macos-aarch64.dmg

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    基于MSP430F5529的两路寻迹小车.zip

    基于MSP430F5529的两路寻迹小车.zip

    cpp实现数据库和数据结构大作业:图书管理系统.zip

    大学生 C/C++/JAVA/Python数据结构学习笔记和资料大全

    Windows下开箱后即时编译体验freeRTOS 的MDK demo工程,使用事件Event实现freeRTOS多线程通信

    Windows下的MDK Keil uVision4的demo工程,STM32F103的IC,开箱即可编译烧写体验: 已包含完整的freeRTOS依赖,可直观体验freeRTOS事件Event实现的多线程通信,代码方面主要通过未使用事件Event来实现多个线程间通信。 工程方面已经集成了freeRTOS的源码及相关事件Event的使用示例,配合博文《FreeRTOS 体验教程:7.如何用事件Event实现FreeRTOS多线程通信?》食用效果更佳。

    一个简单的实验设计示例以及其预期结果

    头歌c语言实验答案 实验结果: 当输入示例字符串后,程序将输出预期结果: Character count: 49 Word count: 9 Line count: 3 这样的实验设计可以帮助学生加深对C语言字符串处理的理解,包括指针操作、字符分类函数的使用以及基本的逻辑控制。

    C#学生管理系统.zip 学生选课及成绩查询系统是一个学校不可缺少的部分.zip

    C#学生管理系统.zip 学生选课及成绩查询系统是一个学校不可缺少的部分

    Eclipse archetype-catalog.xml.zip

    Eclipse archetype-catalog.xml

    数据库管理工具:dbeaver-ce-23.0.1-linux.gtk.x86-64.tar.gz

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    基于MapReduce的招聘数据清洗项目(免费提供源码)

    基于MapReduce的招聘数据清洗项目是一种高效处理和整理大量招聘数据的方法。MapReduce是一种分布式计算模型,由谷歌提出,广泛应用于大规模数据处理。该项目旨在通过MapReduce框架,将原始招聘数据进行清洗、规范化和去重,以生成干净、结构化的数据,便于后续分析和使用。 项目首先通过Mapper函数对原始数据进行初步处理,提取出关键字段如职位名称、公司名称、薪资范围等,并进行初步清洗,如去除空格、特殊字符等。接着,Reducer函数对Mapper输出的数据进行进一步处理,合并重复项,并按照预定规则规范化数据格式。 该项目免费提供源码,便于用户下载、使用和修改。用户可以根据自己的需求,调整MapReduce任务的参数和逻辑,以适应不同的数据清洗要求。通过分布式处理,项目能够高效处理海量招聘数据,提高数据清洗的速度和准确性。 使用基于MapReduce的招聘数据清洗项目,不仅可以大幅度提高数据处理效率,还能保证数据的一致性和准确性,为企业的招聘分析和决策提供可靠的数据支持。项目的源码开放,使得更多用户能够受益于这一高效的数据处理工具。

    unity角色几何优秀的路径动画源码

    unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;unity角色几何优秀的路径动画源码,源码演示视频:https://www.bilibili.com/video/BV1Br421c7Nw/;

    高分项目,基于Unity3D开发实现的HeliHell Pack 直升机控制,内含完整源码+资源+unitypackage

    高分项目,基于Unity3D开发实现的HeliHell Pack 直升机控制,内含完整源码+资源+unitypackage 很多小伙伴都想找能够开直升机的游戏,今天安利几款直升机模拟游戏。在这些游戏里大家会模拟一名直升机驾驶员,驾驶直升机做各种任务。大家可以通过调节方向盘来控制直升机的起降和转...

Global site tag (gtag.js) - Google Analytics