纯抽象类和接口之间的区别 [已关闭]
我和一位同事讨论过,他坚持认为,在Java和C#等语言中,永远没有任何理由使用纯抽象基类,因为它只是意味着你无法解决缺乏多重继承的问题。
我觉得他在这一点上是错误的,因为我一直认为,如果一个事物是名词,那么它就是一个对象,如果它是一个动词,那么它就是一个界面。
例如,如果我想定义 type ,我想在不实现它的情况下强制执行该方法,那么我会使其成为一个纯抽象类。Bird
fly
如果我想定义一个类型,我会用方法使它成为一个接口。Flies
fly
Bird
可能实现 。Flies
我错了吗?
编辑:
为了支持我的观点,我唯一能给出的可靠论据是,在未来的某个时候,设计可能需要改变,以便鸟类可以吃东西。如果所有的鸟都吃得一样,那么就需要加上,使它不是纯粹的抽象的。Bird
如果是一个接口,这种变化将只是一场噩梦,因为我不知道从其他基类继承的东西是否也实现了我的接口,所以我不能只是重构我的问题。Bird
Bird