接口与抽象类的相同与不同
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口与抽象类的相同与不同相关的知识,希望对你有一定的参考价值。
个人理解如下(活到老,学到老,不同编程阶段不同场景下都有新的体会)
代码示例及抽象场景稍后提供
相同点
1.都是对相同的行为或者属性的抽象。
举例1:
中国人,外国人,其他种族的人,动物,物品,房子等,都有名字,所以抽象一个Name
的属性出来。这是属性的抽象
举例2:
人,动物,其他生物,车子,飞机都有移动的特征,所以抽象一个Move
的方法出来,这是行为的抽象
2.都不能被实例化。
很多情况下,接口和抽象类都可以相互替换。但是如下情况下,最好分开来用:
不同点
1.一个类可以实现多个接口,但是只能继承一个抽象类。这个是C#单继承特性决定的。
如果一个类,想实现多个抽象属性或者方法的功能,而这些抽象属性或者方法又分布在不同的抽象类里面,那么这些抽象类最好设计为接口
2.抽象类具有继承性和约束性,接口只具有约束性。
抽象类是对相同事务的抽象,接口更多的是多不同事务的一个接口的约束。
举例1:
人和动物都有名字,都可以Move,但是把人继承动物,多少有些别扭,虽然最后代码可以跑。
举例2:
不同的电气,都接220V的电源,设计相同的三角插座,是一种对所有不同事务的接口抽象,最后的效果就是,只要是用电的工具,都具有相同的插头,表现出不同的工作方式
3.抽象类可以约束子类的构造函数,而接口不可以
4.抽象类可以包含不抽象的东西,而接口不可以
例如抽象类可以包含虚方法,让子类来重写,子类也可以不重写,接口做不到这一点。
不如某一个流程,有10个工厂实现方式都一致,最后第11个工厂实现方式不一样,这时候可以使用抽象方法,为前面10个工厂提供默认实现,第11个工厂重写去实现自己的方式
以上是关于接口与抽象类的相同与不同的主要内容,如果未能解决你的问题,请参考以下文章