4类多态

在软考学习的时候,才发现多态不仅仅只有我认识的那么一两种,很多用过的形式原来它们也是多态呀。

首先来看下大图:

接下来本文将一一举例这些多态,并在末尾做个小对比。

一,简介几种多态

1,泛型

这个听起来比较高大上,但是大家都用过,例如:

机房收费系统——组合查询中,为了尽可能抽出相同部分,使用T代替。还有转换成list的时候,在定义中指定List of T,使用时:

	 mylist = Entity.EntityConverter.convertToList(Of Entity.StuBaseInfo)(dt)

2,模板

这个在C++中见的很多,别的语言中还没有用过,所以就用C++举例了:

template <typename T>
T max(const T& lsh, const T& rhs)
{
return (lsh > rhs) ? lsh : rhs;
}
//返回两个任意类型对象的最大值(对象),前提是该类型能够使用>
//运算符进行比较,并且返回值是bool类型。
//使用:
int a = 3; int b = 4;
cout << max(a, b) << endl;
float c = 2.4; float d = 1.2;
cout << max(c, d) << endl;

//输出结果为:
//4
//2.4

同样是使用时指定T,但是泛型比模板多了对参数的检查功能。

3,重写

面向对象中,最常见的就是一个子类继承一个父类,然后重写它的方法了:

例如:一个类继承一个窗体,然后重写它按钮的点击事件:

4,重载

适用于一个功能有多个参数的情况:

	#include<iostream>
	#include<cstring>
	using namespace std;

	int myMax(int x,int y);	//比较两个整数
	char myMax(char first,char second);	//比较两个字符
	double myMax(double u,double v);  //比较两个小数
	char * myMax(char * frist,char * second);   //比较两个字符串

	int main()  //主函数
	{
		cout<<"in 3 and 5,the max number is "<<myMax(3,5)<<endl;  //调用比较整数的函数
		cout<<"in c and t the max char is:"<<myMax('c','t')<<endl;   //调用比较字符的函数
		cout<<"in 3.1 and -5.3,the max double number is:"<<myMax(3.1,-5.3)<<endl;  //调用比较浮点数的函数
		cout<<"in what and where the max string is:"<<myMax("what","where")<<endl;  //调用比较字符的函数

	}

	//下面为函数体

	int myMax(int x,int y)  //比较两个整数
	{
		if(x>y) return x;
		else return y;
	}

	char myMax(char first,char second)  //比较两个字符
	{
		if(first>second) return first;
		else return second;

	}

	double myMax(double u,double v)  //比较两个小数
	{
		if(u>v) return u;
		else return v;
	}

	char * myMax(char * first,char * second)   //比较两个字符串
	{
		if(strcmp(first,second)>0) return first;
		else return second;

	}

5,父类引用指向子类对象

超级熟悉了吧,设计模式中用的最多的,自我感觉不仅是用的最多的,也是最好用的,举个例子:

<span style="font-size:18px;">        Animal a=new Dog();  </span>

二,小结

时间: 2024-10-16 20:27:42

4类多态的相关文章

Python源码 -- C语言实现面向对象编程(基类&amp;派生类&amp;多态)

由于公司的ERP系统数据量大,有40G+的数据,并发用户90+,连接数1000+,原来的IO性能跟不上用户的操作响应需求,报表查询慢,该做的索引都做过了,索引每周重建一次,还是解决不了问题,为此,公司新购了dell poweredge R720xd服务器,该套服务器支持2个阵列,24个硬盘,双CPU,64G内存,比较牛X的了,我们创建两个raid,两块SAS硬盘做Raid1,6块SSD硬盘做Raid10,系统装好了,高兴呀,但结过测试发现,总有一个raid速度相当慢,和台式机速度一样,我地妈呀,

python之7-2类的继承与多态

类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init 类的多态总是和继承相连的,没有继承,就没有多态一说.一个子类的实例,它即属于这个子类,也属于父类,比如:父亲A和儿子B,儿子B即属于儿子类,也属于人类,但是它不属于父亲类 多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式.在处理多态对象时,只需要关注它的接口即

python 接口类、抽象类、多态

参考https://www.cnblogs.com/Fantac/p/11481114.html 接口类和抽象类总结 在python中没有接口类,但有抽象类;abc模块中的metaclass = ABCMeta,@abstractmethod它的本质是做代码的规范用的,希望子类中能实现父类名字完全一样的方法 接口类和抽象类: 从java的角度上看是有区别的,java本来就支持单继承所以就有了抽象类;java没有多继承,所以为了接口隔离原则,设计了接口这个概念,支持多继承了 而python它既支持

JavaSE复习日记 : 多态

/** * 里氏替换原则 : * 能使用父类的地方,一定可以使用子类 * 什么是多态 : * 父类的引用,指向子类的对象 * 多态的前提条件 : * 有继承关系的两个类 * 多态的目的 : * ☆☆☆ 代码的重用 * 多态发什么在什么时候 : * 赋值的时候 * * !!!!!!!!! 多态中的 ☆☆☆ 覆写 是特指的 成员方法!!!!!!!!! * 什么是覆写 : * 就是在子类有个和父类相同的方法 : 方法名 , 参数列表 , 返回值类型 (和修饰符列表没关系) * 1 方法名相同 : 不相

黑马程序员——java基础--多态

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 模板方法设计模式: 解决的办法:当功能内部一部分是现实确定,一部分是现实不确定的,这时间不可把不确定的部分暴漏出去,让子类实现. 实例:统计一个程序的的运行时间 思路:程序的结束时间减去程序的开始时间 abstract class Gettime{ public final void getTime(){//这段功能用final限制 long start = System.currentTim

final修饰符,多态,抽象类,接口

1.final修饰符 final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆盖,复写) final可以修饰变量,该变量不能被重新赋值.因为这个变量其实常量 2.多态 同一个对象(事物),在不同时刻体现出来的不同状态. 举例:        猫是猫,猫是动物.        水(液体,固体,气态). 多态的前提: A:要有继承关系.        B:要有方法重写.            其实没有也是可以的,但是如果没有这个就没有意义.              

面向对象的三大特征——封装、继承、多态

接触过面向对象的人都知道面向对象有三大特征,分别是封装.继承和多态.这三者分别指的是什么,为什么是这哥仨,使用他们有什么好处,我们来梳理一下. 封装 原则:隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: ①将变化隔离. ②便于使用. ③提高重用性. ④提高安全性. Demo1: 比如一个学生类:他具有姓名和年龄两个属性,但是为了提高安全性和重用性,便于使用,我们将其封装起来. public class Student { private String name; private in

八、2、继承和多态

继 承(面向对象特征之一) 好处: 1:提高了代码的复用性. 2:让类与类之间产生了关系,提供了另一个特征多态的前提. 父类的由来:其实是由多个类不断向上抽取共性内容而来的. java中对于继承,java只支持单继承.java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良. 单继承:一个类只能有一个父类. 多继承:一个类可以有多个父类. 为什么不支持多继承呢? 因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体.

多态、抽象类、接口_DAY09

1:多态(掌握) (1)多态概念:一种事物的多种形态 (2)体现:父类的引用指向其子类的实例对象;接口的引用指向其实现类的实例对象 (3)特点: 成员方法:编译看左边,运行看右边 运行:子类重写的方法运行 编译:父类的引用类型必须有该方法 成员变量:编译看左边,运行看左边 运行:访问的为父类的属性 编译:父类的引用类型必须有该属性 总结:只有在方法调用的时候,才会判断子类是否重写,重写调用子类方法.其他情况均看父类类型 记忆方法:方法运行看右边,其他看左边 例子: /* 多态: 一种事物的多种形