在“学说”中,假设我想实现不同类型的车辆。也许是汽车,飞机,自行车等……所有这些车辆具有许多不同的属性,但也很普通,例如它们都是用材料制成的。
因此,如果我想获取此材料...应该使用属性Vehicle
实现抽象类material
并实现getter / setter还是应该定义接口IVehicle
和在其中定义吸气剂/设置剂,以确保确实有一种获取和设置材料的方法?还是我应该同时使用两者?
使用界面感觉“专业”……但是在界面中定义吸气剂/设置剂感觉不对,所以我个人的感觉是:
不使用接口,仅使用抽象类。
但是抽象类方法是否可以防止滥用?例如,在另一个地方,我肯定希望从Material
函数返回一个getMaterial
类型……抽象类方法是否还可以避免不返回完整的意外内容(如接口那样)?
因此,如果我将此工具扩展到另一个具体的类,开发人员应该不能返回意外的东西,但如果需要,还应该能够更改特定方法中的逻辑。
答案 0 :(得分:1)
我的2美分:
您可以使用返回null(或其他一些预定值)的方法编写抽象类,这将要求您在每个派生类中实现它们。
这种方法仍然需要您编写一些样板代码来检查每个类中的条件。
我个人会在这里使用一个接口,因为您的类的性质似乎是多种多样的,并且只能部分概括为一个抽象类。但是,我也没有发现使用抽象类方式有任何问题。在这种情况下,细节决定成败。