我有一个带有一个抽象方法的抽象类,我想在3个不同的类中实现该方法,但是这3个类中的2个具有与下面的代码相同的方法实现,我可以做什么来为两个课程?
注意:我不能代表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";}
}
答案 0 :(得分:5)
你可以在这里消除一些复杂性并实现"再见"方法直接在基类A中,并用" Hello"覆盖它。派生类B中的方法:
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 { }
还有其他选项,例如将常见行为提取到新类并通过组合而不是继承来重用它们 - 如果您的类足够复杂,那么可以说这可以简化单个职责并促进测试。
答案 1 :(得分:2)
将默认行为放在A。
中abstract class A {
public void method() {print "Bye";}
}
class B extends A {
void method(){print "Hello";}
}
class C extends A {
// uses the parent method
}
class D extends A {
// uses the parent method
}
答案 2 :(得分:1)
你可以在两者之间迈出一步。创建一个实现该方法的抽象类,并从中为C和D派生
abstract class A {
public 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 { }