C# 多态和接口
1多态可以有属性,接口只有方法
2关键字不同,多态有静态多态(abstract)和动态多态(virtual),静态多态不能new()出自己,动态多态可以;多态中可以有自己的方法可设置不需要子类重写,接口则否,
3.基于上述两点发现,多态比接口更宽松,但有时由于接口的单一使得很使用明确,别人用起来很方便.多态显得太庞大.
根本不需要查看源代码是如何实现的,这就是多态的好处.
可以看 https://www.cnblogs.com/wl-blog/p/10361894.html 讲的什么时候用接口
我要问一个问题,喜鹊和老鹰都可以飞,这个飞的能力,我怎么来实现呢?
XXX答:“在父类Bird中添加一个Fly方法不就好了~~”
我再问:“好的,照你说的,企鹅继承父类Bird,但是不能企鹅不能飞啊,这样在父类Bird中添加Fly方法是不是不合适呢?”
XXX答:“那就在能飞的鸟类中分别添加Fly方法不就可以了吗?”
对,这样是可以,功能完全可以实现,可是这样违背了面向对象开放封闭原则,下次我要再扩展一个鸟类比如猫头鹰(Owl),我还要去源代码中看下Fly是怎么实现的,然后在Owl中再次添加Fly方法,相同的功能,重复的代码,这样是不合理的,程序也不便于扩展;
其次,如果我还要添加一个飞机类(Plane),我继承Bird父类,合适吗?
很显然,不合适!所以我们需要一种规则,那就是接口了,喜鹊,老鹰,飞机,我都实现这个接口,那就可以飞了,而企鹅我不实现这个接口,它就不能飞~~
好,接下来介绍一下接口如何实现多态~