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.从 ...
随机推荐
- sort-based shuffle的核心:org.apache.spark.util.collection.ExternalSorter
依据Spark 1.4版 在哪里会用到它 ExternalSorter是Spark的sort形式的shuffle实现的关键.SortShuffleWriter使用它,把RDD分区中的数据写入文件. o ...
- adt安装慢解决
原地址:http://yuanzhifei89.iteye.com/blog/1884398 安装adt的时候不管时在线安装还是下载下来了离线安装,都不见安装进度条动,只要把一个选项勾掉立马就让进度条 ...
- android 在一个scrollView里面嵌套一个需要滑动的控件(listView、gridView)
package cn.via.dageeeOrderFood.widget; import android.content.Context; import android.graphics.Point ...
- xcode 树形管理 cocos2d-x的资源
把资源以目录的形式加入xcode中, 同时, 在加入时, 选择"Create Folder References for any added folders", 而不是默认的&q ...
- [译]15个关于Chrome的开发必备小技巧
谷歌Chrome,是当前最流行且被众多web开发人员使用的浏览器.最快六周就更新发布一次以及伴随着它不断强大的开发组件,使得Chrome成为你必备的开发工具.例如,在线编辑CSS,console以及d ...
- Hibernate映射之实体映射<转载>
实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的.Hibernate支持xml配置文件与@注解配置两种方式.xm ...
- hdu4619Warm up 2
http://acm.hdu.edu.cn/showproblem.php?pid=4619 二分图匹配 最小点覆盖 = 最大匹配 #include <iostream> #includ ...
- struts2关于package 的 namespace
namespace决定了action的访问路径,默认为"",可以接收所有路径的actionnamespace可以写为/ ,或者/xxx,或者/xxx/yyy,对应的action访问 ...
- bzoj3774
这算是最小割中比较难的吧 看到选取显然最小割 看到上下左右四个点我感觉肯定和染色相关 注意每个点的收益获得条件是[或],因此我们考虑拆点i', i,分别表示通过四周控制和控制本身的代价 连边s--&g ...
- poj3254
还是那句老话:dp关键在状态: 求有多少种排布方式,是任意两头牛不相邻(有些地方不能放): 不用心,一开始还纠结了半天 和之前USACO上某题方法是一样的,每一行放或不放只有两种情况 把它当作一个二进 ...