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

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

相同点

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

举例1:

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

举例2:

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

2.都不能被实例化。

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

不同点

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

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

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

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

举例1:

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

举例2:

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值