多态的说明

多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征!
多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化(即为了程序的可扩展性)。

实现多态的主要手段:

1.虚方法virtual   子类重写父类中的方法

2.抽象方法abstract   子类重写父类中的方法

3.接口。 实现接口的类,将接口中的方法实现。

虚方法virtual

关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写。

抽象类

抽象类不能被实例化。抽象类中可以有普通成员。
抽象类存在的意义:

1.抽象类不能被实例化,只能被其他类继承

2.继承抽象类的子类必须把抽象类中的所有抽象成员都重写(实现)(除非子类也是抽象类。)

3.抽象类就是为了重写→多态(代码重用)。

4.抽象类中可以有实例成员也可以有抽象成员。

1.需要用abstract关键字标记
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化,
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象方法不能用static修饰
抽象类的作用:抽象类的作用就是为了让子类继承。

接口

1、接口是一种规范。为了多态。
2、接口不能被实例化。
3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public)
4、接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。
5、接口中只能有方法、属性、索引器、事件,不能有“字段”。
6、接口与接口之间可以继承,并且可以多继承。
7、实现接口的子类必须实现该接口的全部成员。
8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。class MyClass:A,IA{},因为类是单继承的。
9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。(抽象类也能实现接口,用abstrac标记)
10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。

虚方法和抽象方法的区别
1、虚方法必须有实现,抽象方法必须没有实现
2、抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中
3、抽象方法必须在子类中重写,虚方法可以被重写

抽象类和接口的区别
接口定义类的公共行为,抽象类定义类的公共实现
一个类只能继承自一个类(抽象类),但是可以同时实现多个接口
接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员
接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写
好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

什么时候使用抽象类,什么时候使用接口
抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
1. 飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。 2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承); 一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

THE END
分享
二维码
打赏
海报
多态的说明
多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征! 多态的作用:把不同的子类对象都当作父类来看,可以屏蔽……
<<上一篇
下一篇>>