抽象类和接口在一起?
2022-08-30 22:10:48
我有一段代码,其中一些类正在实现接口。
感觉是正确的,但是子类之间有一点重复 - 即3种方法。
所以这是在尖叫着使用一个抽象类。
我的问题是,在以下情况下同时使用抽象类和接口会有什么缺点:
- 用于实现接口的抽象类和用于扩展抽象类的子类
- 用于扩展抽象类和实现接口的子类
或
抽象类和接口不应该像这样一起使用吗?
我有一段代码,其中一些类正在实现接口。
感觉是正确的,但是子类之间有一点重复 - 即3种方法。
所以这是在尖叫着使用一个抽象类。
我的问题是,在以下情况下同时使用抽象类和接口会有什么缺点:
或
抽象类和接口不应该像这样一起使用吗?
同时使用这两者是完全正常的。例如,考虑JDK中的抽象列表
(实现)和抽象映射
(实现)。List
Map
我的下意识反应是让抽象类实现接口,然后让具体类从中派生:
abstract class Base implements TheInterface {
/* ...shared methods... */
}
class Concrete1 extends Base { }
class Concrete1 extends Base { }
但是你提出的另一种可能性的问题让我思考,我看不出有什么理由反对这样做:
abstract class Base {
/* ...shared methods... */
}
class Concrete1 extends Base implements TheInterface { }
class Concrete1 extends Base implements TheInterface { }
此外,我可以看到这样做的论据,特别是它消除了抽象类和接口之间的耦合。如果您有另一个类需要提供的功能,但不需要实现接口,则可以灵活地执行此操作。Base
还有第三种选择:构图。您根本不能有抽象类,而是让实现接口的多个具体类在其实现中使用公共帮助器类:
class Helper {
/* ...shared methods... */
}
class Concrete1 implements TheInterface {
/* ...uses instance of Helper */
}
class Concrete1 implements TheInterface {
/* ...uses instance of Helper */
}
这以另一种形式具有相同的灵活性。