[英]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.