多态与多态的实现

“我想起来了。”这句话何解?是“我想起身了”还是“我想起了什么”。一句话有不同的理解,一个事物有不同形态,也就是同一符号或者名词在不同情况下具有不同解释。这一现象可称为多态。

1定义

多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

2作用

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

使用继承性的结果就是当创建了一个类的家族,在认识这个类的家族时,就是把子类的对象当作基类的对象,这种认识又叫作upcasting(向上转型)。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动找出合适的对象来执行操作。这种现象又称为多态性。

总的来说:

1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

3实现方式

多态的存在有三个前提: 1、需要有继承关系;2、子类重写父类的方法; 3、父类引用指向子对。

(1)   用抽象类实现多态

抽象类是实现多态的方法之一,一个类被abstract标记的类叫抽象类。当父类的方法不知道如何去实现或者要把某个类抽象出来的时候,可以考虑将父类写成抽象类,将方法写成抽象方法,抽象类的成员也必须标记abstract,即抽象类不一定包含抽象方法,但抽象方法所在的类一定是抽象类,并且不能有任何实现,也就是没有方法体,抽象成员的访问修饰符可以不写,如果写,不能是private,实现父类抽象方法的方法的参数和返回值都要一样;抽象类虽然有构造器,但不能实例化。

l  抽象类和抽象方法实现多态性

l  父类提供一系列规定, 约束子类的行为

l  父类可以提供一些共性的行为

圆形和矩形都有一个共同的父类:形状,但形状却是抽象的,我们无法计算它的面积和周长,所以必须写成抽象类。而圆形和矩形,它们计算面积和周长的方法也是不同的。这样,我们就必须对形状这个抽象类中,计算面积和周长的方法进行重写。

 

 抽象类也可以包含抽象的属性,因为属性的本质是 get、set这两个方法。

 

 

 

 

(2)    接口多态性

用接口实现多态性分三步:1、编写接口;2、实现类实现接口中的方法;3、接口(类型)new 实现类对象。

同一个接口,使用不同的实例而执行不同操作而形成多态。

 

 参考链接:

https://www.cnblogs.com/lcxBlog/p/4886385.html

https://blog.csdn.net/qq_42881311/article/details/89970057

猜你喜欢

转载自www.cnblogs.com/wq-7047/p/12470689.html