Polymorphism
多态定义(百度百科):多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述
——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术
内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function) 实现的。
用我今天学到的方法来说,多态(Polymorphism)就是父类型的引用可以指向子对象。(“子类就是父类”)
interface Animal {
void shout(); // 定义抽象shout()方法
}
// 定义Cat类实现Animal接口
class Cat implements Animal {
// 实现shout()方法
public void shout() {
System.out.println("喵喵……");
}
}
// 定义Dog类实现Animal接口
class Dog implements Animal {
// 实现shout()方法
public void shout() {
System.out.println("汪汪……");
}
}
// 定义测试类
public class Example13 {
public static void main(String[] args) {
Animal an1 = new Cat(); // 创建Cat对象,使用Animal类型的变量an1引用
Animal an2 = new Dog(); // 创建Dog对象,使用Animal类型的变量an2引用
animalShout(an1); // 调用animalShout()方法,将an1作为参数传入
animalShout(an2); // 调用animalShout()方法,将an2作为参数传入
}
// 定义静态的animalShout()方法,接收一个Animal类型的参数
public static void animalShout(Animal an) {
an.shout(); // 调用实际参数的shout()方法
}
}
1. 多态:父类型的引用可以指向子对象。
2. Parent p = new Child();当使用多态方式调法时,首先检查父类中是否有 sing() sing() sing()方法, 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 sing()方法。
3.向上类型转换( 向上类型转换( upcastupcastupcastupcast upcast):比如说将 ):比如说将 Cat Cat类型转换为 Animal Animal 类型 ,即将子转换为父类型。
4.向下类型转换( downcastdowncastdowncastdowncastdowncastdowncast downcast):比如将 Animal Animal 类型转换为 类型转换为 Cat Cat类型 。即将父转换为子类型。对于向下,必须要显式指定 转换为子类型。对于向下,必须要显式指定 转换为子类型。对于向下,必须要显式指定 (必须要使用强制类型 )
package polymorphism;
public abstract class Person {
public abstract void say();
}
package polymorphism;
public class Chinese extends Person {
@Override
public void say() {
System.out.println("Chinese say chinses");
}
}
package polymorphism;
public class American extends Person {
@Override
public void say() {
System.out.println("American say English");
}
}
package polymorphism;
public class Polymorphism {
static void doaction(Person person)
{
person.say();
}
public static void main(String[] args) {
Person chinese=new Chinese();
Person american=new American();
doaction(chinese);
doaction(american);
}
}
Polymorphism的更多相关文章
- Replace conditional with Polymorphism
namespace RefactoringLib.Ploymorphism.Before { public class Customer { } public class Employee : Cus ...
- TIJ——Chapter Eight:Polymorphism
The twist |_Method-call binding Connecting a method call to a method body is called binding. When bi ...
- Scalaz(2)- 基础篇:随意多态-typeclass, ad-hoc polymorphism
scalaz功能基本上由以下三部分组成: 1.新的数据类型,如:Validation, NonEmptyList ... 2.标准scala类型的延伸类型,如:OptionOps, ListOps . ...
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-002Table per concrete class with implicit polymorphism(@MappedSuperclass、@AttributeOverride)
一.结构 二.代码 1. package org.jpwh.model.inheritance.mappedsuperclass; import javax.persistence.MappedSup ...
- 封装,capsulation,&&继承,Inheritance,&&多态,polymorphism
Inheritance&&polymorphism 层次概念是计算机的重要概念.通过继承(inheritance)的机制可对类(class)分层,提供类型/子类型的关系.C++通过类派 ...
- Polymorphism & Overloading & Overriding
In Java, a method signature is the method name and the number and type of its parameters. Return typ ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- {key}面向对象程序设计-C++ polymorphism 【第十三次上课笔记】
Peronal Link: http://segmentfault.com/a/1190000002464822 这节课讲了本门课程 面向对象程序设计中最为重要的一个部分 - 多态 /******** ...
- 多态性Polymorphism
一.多态性的概念: 1.多态:在面向对象方法中一般是这样表述多态性的: 向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法).也可以说,多态性是“一个接口,多种方法”. 2.从 ...
随机推荐
- JAVA面试题:String 堆内存和栈内存
java把内存划分为两种:一种是栈(stack)内存,一种是堆(heap)内存 在函数中定义的一些基本类型的变量和对象的引用变量都在栈内存中分配,当在一段代码块定义一个变量时,java就在栈中为这个变 ...
- IText 生成简单表格(报表)doc文档 单元居中
IText生成doc文档需要三个包:iTextAsian.jar,iText-rtf-2.1.4.jar,iText-2.1.4.jar 亲测无误,代码如下所示: import com.lowagie ...
- centos6.5下Zabbix系列之Zabbix安装搭建及汉化
最近在研究zabbix,在整理完成之后就有了写一下总结博客的想法,在我研究zabbix的时候给我很大帮助的是it你好,博客地址http://itnihao.blog.51cto.com/他做的zabb ...
- C++动态链接库测试实例
前话 上一章节我导出了一个动态链接库 要使用该链接库,我们还需要该链接库对外公开的函数,即头文件 下面开始实例 测试实例 第一步--将动态链接库的dll.lib.和头文件导入项目中 文件目录如下: 项 ...
- objective C中数据持久化方式1--对象归档
第一.数据持久化的方式: NSKeyedArchiver--对象归档 属性列表化(NSArray.NSDictionary.NSUserDefault) SQlite数据库.CoreData数据库 其 ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- poj3686The Windy's (KM)
http://poj.org/problem?id=3686 拆点很巧妙 将每个M个点拆成m*n个点 分别表示第i个玩具在第j个机器上倒数第K个处理 假设这k个玩具真正用在加工的时间分为a1,a2,a ...
- innodb master thread 工作原理
参考 innodb参数汇总 InnoDB的Master Thread工作原理 innodb_max_dirty_pages_pct 默认值 show variables like 'innodb_m ...
- BZOJ3258: 秘密任务
题解: 其实就是一个简单的最小割判断是否唯一解... 可是我写了一上午还没过...T_T 把1-n的最短路上的边提出来做最小割. 然后从s,t分别bfs判断必须在某个割的点.如果有的点没有被bfs到, ...
- OK335xS tmp75 Qt 温度读取
/******************************************************************* * OK335xS tmp75 Qt 温度读取 * 说明: * ...