2016-09-10 23 views
0

我這類結構:是否有一些技巧在使用封裝時共享方法行爲?

abstract class A{ 
    protected void doTest(){}; 
    abstract void test(); 
} 

abstract class B extends A{ 
} 

class C extends B{ 
    public void test(){ 
    doTest(); 
    } 
} 

class D extends A{ 
    public void test(){ 
    doTest(); 
    } 
} 

d不能延伸在兩個B.
測試()將實施完全相同的功能(其可以包含的幾行代碼)。
目前我被迫複製行爲相同。
我無法創建另一個類來實現該行爲,因爲它訪問受保護的方法。

有沒有什麼辦法呢?

回答

2

如果test()確實相同,則不應該是抽象的。

abstract class A{ 
    protected void doTest(){}; 

    public void test() { 
    //Shared functionality calling doTest() and doing other stuff. 
    } 
} 

即使test()依賴領域中不同子類中,你可以使抽象的getter和使用這些:

abstract class A{ 
    protected void doTest(){}; 

    protected abstract String getName(); 

    public void test() { 
    //Shared functionality calling doTest() and doing other stuff. 
    //Can also use getName() 
    } 
} 

abstract class B extends A {} 

class C extends B { 

    @Override public String getName() { return "C"; } 

} 

class D extends A { 

    @Override public String getName() { return "D"; } 

} 
+0

令人印象深刻的感謝!我在這裏已經有好幾個月了:),我甚至不知道如何將它直接放在問題上,直到今天hehe ..我最終創建了另一個具有抽象方法的類E,在A處使用。然後,我擴展了這個類並實現了我真正需要的東西,並且它在C和D都能很好地工作! –

相關問題