Java /抽象类

时间:2017-03-14 14:30:40

标签: java

我有一个带有一个抽象方法的抽象类,我想在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";}
}

3 个答案:

答案 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 { }