Mar*_*ace 12 php java abstract-class design-patterns interface
我有一段代码,其中一些类正在实现一个接口.
这感觉是正确的,但是在儿童班中有一点重复 - 即3种方法.
所以这是尖叫着使用抽象类.
我的问题是,在以下情况下使用抽象类和接口是否有任何缺点:
要么
抽象类和接口是否应该像这样一起使用?
T.J*_*der 20
将这两者结合使用是完全正常的.考虑在JDK中实例AbstractList(实现List)和AbstractMap(实现Map).
我的下意识反应是让抽象类实现接口,然后从中派生具体类:
abstract class Base implements TheInterface {
/* ...shared methods... */
}
class Concrete1 extends Base { }
class Concrete1 extends Base { }
Run Code Online (Sandbox Code Playgroud)
但是你的问题提出了另一种可能让我觉得,我不能看到太多争论的反对做这样的说法:
abstract class Base {
/* ...shared methods... */
}
class Concrete1 extends Base implements TheInterface { }
class Concrete1 extends Base implements TheInterface { }
Run Code Online (Sandbox Code Playgroud)
此外,我可以看到一个参数用于做这种方式,具体而言,它消除了抽象类和接口之间的耦合.如果您有其他类需要的功能Base提供,但并不需要实现该接口,您可以灵活地做到这一点.
还有第三种选择:组合.根本没有抽象类,而是实现接口的多个具体类在其实现中使用公共帮助器类:
class Helper {
/* ...shared methods... */
}
class Concrete1 implements TheInterface {
/* ...uses instance of Helper */
}
class Concrete1 implements TheInterface {
/* ...uses instance of Helper */
}
Run Code Online (Sandbox Code Playgroud)
这具有相同的灵活性,另一种形式.