簡體   English   中英

Java /抽象類

[英]Java / Abstract Class

我有一個帶有一個抽象方法的抽象類,我想在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";}
}

您可以在這里消除一些復雜性並直接在基類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 { }

還有其他選項,例如將常見行為提取到新類並通過組合而不是繼承來重用它們 - 如果您的類足夠復雜,那么這可以簡化封裝單個職責並促進測試。

將默認行為放在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
}

你可以在兩者之間邁出一步。 創建一個實現該方法的抽象類,並從中為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 { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM