接口与抽象类的相同与不同

Posted lishuangquan1987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口与抽象类的相同与不同相关的知识,希望对你有一定的参考价值。

个人理解如下(活到老,学到老,不同编程阶段不同场景下都有新的体会)
代码示例及抽象场景稍后提供

相同点

1.都是对相同的行为或者属性的抽象。

举例1:

中国人,外国人,其他种族的人,动物,物品,房子等,都有名字,所以抽象一个Name的属性出来。这是属性的抽象

举例2:

人,动物,其他生物,车子,飞机都有移动的特征,所以抽象一个Move的方法出来,这是行为的抽象

2.都不能被实例化。

很多情况下,接口和抽象类都可以相互替换。但是如下情况下,最好分开来用:

不同点

1.一个类可以实现多个接口,但是只能继承一个抽象类。这个是C#单继承特性决定的。

如果一个类,想实现多个抽象属性或者方法的功能,而这些抽象属性或者方法又分布在不同的抽象类里面,那么这些抽象类最好设计为接口

2.抽象类具有继承性和约束性,接口只具有约束性。

抽象类是对相同事务的抽象,接口更多的是多不同事务的一个接口的约束。

举例1:

人和动物都有名字,都可以Move,但是把人继承动物,多少有些别扭,虽然最后代码可以跑。

举例2:

不同的电气,都接220V的电源,设计相同的三角插座,是一种对所有不同事务的接口抽象,最后的效果就是,只要是用电的工具,都具有相同的插头,表现出不同的工作方式

3.抽象类可以约束子类的构造函数,而接口不可以

4.抽象类可以包含不抽象的东西,而接口不可以

例如抽象类可以包含虚方法,让子类来重写,子类也可以不重写,接口做不到这一点。
不如某一个流程,有10个工厂实现方式都一致,最后第11个工厂实现方式不一样,这时候可以使用抽象方法,为前面10个工厂提供默认实现,第11个工厂重写去实现自己的方式

以上是关于接口与抽象类的相同与不同的主要内容,如果未能解决你的问题,请参考以下文章

Java的接口和C++的虚类的相同和不同处?

PHP中接口与抽象类的异同点有哪些

java抽象类与接口 中 相同方法的调用

接口和抽象类的相同与区别

接口和抽象类的相同与区别

抽象类和接口的异同