Hei*_*erg 27 java design-patterns
我之前了解到抽象类可以扩展具体类.虽然我没有从JAVA设计师那里看到它的原因,但它没问题.我还了解到,扩展具体类的抽象类可以使重写方法成为抽象.为什么?你能提供有用的用例吗?我正在努力学习设计模式,我不想错过任何东西.
这是一个例子:
public class Foo
{
public void test()
{
}
}
public abstract class Bar extends Foo
{
@Override
public abstract void test();
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*rry 16
如果我有一组我想要test()for 的默认实现的类(因此它们可以从中扩展Foo),以及我想强制提供它们自己的实现的那些类的子集(在这种情况下将它抽象为子类将强制执行此操作.)
当然,这个例子中的替代方法是test()在顶级类而不是子类中声明抽象,这就是你通常所做的 - 但是有些情况下,满足is-a继承关系意味着它从设计的角度来看偶尔会更有意义.这种情况很少见,但有时你会看到它.
顺便说一句,虽然是一个特例,但请记住,Object除非另有说明,否则所有类都会隐式扩展.因此,如果你包含这个案例,那么扩展具体类的抽象类毕竟不是那么不寻常!
基本上是选择性地重用一些现有(遗留?)代码。
例如:假设有人已经创建了一个具体的类-C(当然是完整的实现)。
现在,由于您正在设计一个新系统(它有一个抽象类 A)并且您分析了现有系统并发现您将拥有一些与具体类 C的方法几乎相似的方法。但是您还发现具体类 C 的某些方法过于具体,您希望在抽象类 A的具体子类中强制实现这些方法。
因此,它使您能够有选择地选择要重用的方法和不重用的方法。