个人理解如下(活到老,学到老,不同编程阶段不同场景下都有新的体会)
代码示例及抽象场景稍后提供
中国人,外国人,其他种族的人,动物,物品,房子等,都有名字,所以抽象一个Name
的属性出来。这是属性的抽象
人,动物,其他生物,车子,飞机都有移动的特征,所以抽象一个Move
的方法出来,这是行为的抽象
很多情况下,接口和抽象类都可以相互替换。但是如下情况下,最好分开来用:
如果一个类,想实现多个抽象属性或者方法的功能,而这些抽象属性或者方法又分布在不同的抽象类里面,那么这些抽象类最好设计为接口
抽象类是对相同事务的抽象,接口更多的是多不同事务的一个接口的约束。
人和动物都有名字,都可以Move,但是把人继承动物,多少有些别扭,虽然最后代码可以跑。
不同的电气,都接220V的电源,设计相同的三角插座,是一种对所有不同事务的接口抽象,最后的效果就是,只要是用电的工具,都具有相同的插头,表现出不同的工作方式
例如抽象类可以包含虚方法,让子类来重写,子类也可以不重写,接口做不到这一点。
不如某一个流程,有10个工厂实现方式都一致,最后第11个工厂实现方式不一样,这时候可以使用抽象方法,为前面10个工厂提供默认实现,第11个工厂重写去实现自己的方式