教女朋友学编程之 --- 多态

你先理解下什么是多态,最基本的多态,我给你举个例子:
有一个类叫做Animal,也就是代表一个动物的类,Animal类里有一个函数 tweet(),tweet的意思是鸣叫;也就是我们在调用Animal的这个函数时,可以达到让“某种动物鸣叫”的效果。
但是不同的动物“鸣叫的声音”是不同的,所以我们为了实现不同动物不同的叫声,会继承Animal实现新的具体动物的子类,比如说Dog和Cat,在具体动物的类里去实现自己的 tweet() 鸣叫的方式,从而达到如下目的:我们在调用不同动物(Dog和Cat)的 tweet() 函数时,会有不同的效果,比如调用Dog的tweet()我们会听到狗叫,调用Cat的tweet()我们会听到猫叫。看下面的代码。

(如果你不懂子类父类的概念,你就想想Animal和Dog,Cat的例子,Animal是父类,因为Dog和Cat都是Animal的其中一种,Animal有所有动物的共性,二Dog和Cat都是具体化的一种动物,有他们自己的特性,所以他们是子类。)

// 父类
abstract class Animal {
  void tweet();
} 

// 狗,继承了Animal
class Dog extends Animal {
  void tweet() {
    "实现了狗叫的行为"
  }
}

// 猫,继承了Animal
class Cat extends Animal {
  void tweet() {
    "实现了猫叫的行为"  
  }
}

//我们现在创建一只狗和一只猫,分别让他们叫。
Animal dog = new Dog();
dog.tweet();

Animal cat = new Cat();
cat.tweet();
}

上面的代码,我们通过Cat类和Dog类都继承了抽象的Animal类,并且分别实现了自己的自己的tweet()函数,就让Dog和Cat这两种可以“鸣叫”的Animal有了自己独有的鸣叫方式。这个时候我们通过创建Dog和Cat两种类型的Animal,再调用他们的tweet方法,会分别听到“猫叫”和“狗叫”。
这就是多态,通过在不同的子类对同一个函数的不同实现,来控制不同子类自己特殊的行为,也就是在这里举例子的“鸣叫”。

下面来解释你ppt上的三种多态:

1、Subtype polymorphism(子类多态)

其实这个就是我刚才举的例子,最常用的多态,就是在子类里根据自己的特性实现同一个父类方法,来达到不同的效果。

2、parametric polymorphism(参数化多态,也就是C++中的模板和Java中的泛型)

这里只能举例子来说明,看下面代码。

T add(T a, T b) {
  return a+b;
}

上面的add函数,实现了a和b相加的功能,T可以在程序运行时代表任何类型
的变量,看下面的例子:
double result = add<double>(6.666, 9.999);
int result = add<int>(6, 9);

*** PS:上面两行代码,尖括号<>中的类型(double或int),是为了指定上述代码中的‘T’ ***

第一条代码,可以得到6.666和9.999相加的结果,因为这个结果是double类型(小数),所以上面那段含有“T”的代码会判断出来需要返回给你一个double(小数)的值。
同理,第二条代码运行的时候,上面那段含有“T”的代码会判断出来需要返回给你一个int(整数)的值。
也就是说,通过T来指代类型,可以让这段代码同时具有计算整数和小数相加的功能,并且返回相应类型的值。

具体到代码来看,当我们指定T为double时候,上面的代码会被解析成:

double add(double a, double b) {
  return a+b;
}

而当我们指定T为int时,上面的代码会被解析成:

int add(int a, int b) {
  return a+b;
}

3、Ad-hoc polymorphism(非参数化多态,最简单的就是函数重载)

参考这篇文章的1、2部分就好了:http://blog.csdn.net/lf_2016/article/details/51769789

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布“We have new ...
    yeshenlong520阅读 2,261评论 0 9
  • 程序在运行的过程中,根据传递的参数的不同,执行不同的函数或者操作不同的代码,这种在运行过程中才确定调用的方式成为运...
    云Shen不知处阅读 400评论 0 0
  • 一.成员变量与局部变量的区别 成员变量:在类中定义,用来描述对象将要有什么(属性)。可被本类方法和其他跟当前类有关...
    jeffierw阅读 540评论 0 0
  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Sub...
    chen_000阅读 242评论 1 1
  • 1.面向对象三大特性 -封装性 -继承性 -多态性 2.什么是封装 封装性就是隐藏实现细节,仅对外公开接口。 3....
    梦夜繁星阅读 1,080评论 0 6