美文网首页
教女朋友学编程之 --- 多态

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

作者: 莫绪旻_向屿 | 来源:发表于2017-09-14 12:29 被阅读0次

你先理解下什么是多态,最基本的多态,我给你举个例子:
有一个类叫做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

相关文章

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

    你先理解下什么是多态,最基本的多态,我给你举个例子:有一个类叫做Animal,也就是代表一个动物的类,Animal...

  • 十六、多态、静态联编和动态联编、虚析构函数、三重

    1.多态2.多态意义3.静态联编和动态联编4.虚析构函数5.重载、重写、重定义 1.什么是多态 1.1浅析多态的意...

  • 小白学编程之HTML/CSS Day002

    小白学编程之HTML/CSS Day 002 上期回顾 在上一篇学习笔记中,主要学习了以下内容,可以翻阅《小白学编...

  • 小白学编程之HTML/CSS Day003

    小白学编程之HTML/CSS Day 003 往期回顾 小白学编程之HTML/CSS Day001小白学编程之HT...

  • C++基础多态(PolyMorphism)

    C++按照实现的时机分为编译时多态和运行时多态1.编译时多态也成为静态连编,是指程序在编译的时候就确定了多态性,通...

  • 女儿是我的严格老师

    2020年7月份在朋友圈发招学游泳伴,结果拉了朋友圈的人一起来学游泳。我每天都陪娃去游泳,在岸上指手画脚地教女儿。...

  • 多态与重载的区别

    重载可认为是静态的多态,静态联编,发生在编译阶段; 多态是动态的,动态联编,发生在运行阶段; 静态的比动态的效率高...

  • 教女儿学赞美

    彭婆小学 席巧辉 昨天晚上吃饭时, 女儿说:“妈妈, 我跟你说一件事儿 。”“哦,说来听听。"我笑吟...

  • 教女儿学做饭

    今天一边做晚饭一边在想,应该教小女儿也学习做饭,大女儿会做很多菜,我却很少让小女操练。 做饭是生存必备技能之一,会...

  • 教女朋友爬虫

    我有个马上要混IT圈的女朋友,可她连大学C语言都是睡过的。我就是个操心的命,担忧她适应不了与周遭程序猿怎么交流。 ...

网友评论

      本文标题:教女朋友学编程之 --- 多态

      本文链接:https://www.haomeiwen.com/subject/zgxdsxtx.html