我有一个带有一个抽象方法的抽象类,我想在 3 个不同的类中实现该方法,但这 3 个类中的 2 个具有与以下代码相同的方法实现,我该怎么做才能为这两个类提供一个实现类(class)?
注意:我不能将 C 和 D 表示为一个类!!
abstract class A
{
public abstract void method();
}
class B extends A
{
void method(){print "Hello";}
}
class C extends A
{
void method(){print "Bye";}
}
class D extends A
{
void method(){print "Bye";}
}
最佳答案
您可以消除此处的一些复杂性,直接在基类 A 中实现“Bye”方法,并在派生类 B 中使用“Hello”方法覆盖它:
class A { void method() { print "Bye"; } }
class B extends A { void method() { print "Hello"; } }
如果 A 必须保持抽象,那么您可以创建一个中间类,其中包含类 C 和 D 所需的行为,然后创建 C 并简单地扩展它而不覆盖任何方法:
abstract class A { abstract void method(); }
abstract class CD extends A { void method() { print "Bye"; } }
class B extends A { void method() { print "Hello"; } }
class C extends CD { }
class D extends CD { }
还有其他选项,例如将常见行为提取到新类中,并通过组合而不是继承来重用它们 - 如果您的类足够复杂,那么这可以更简单地封装单一职责并促进测试。
关于Java/抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788757/