2012-10-19 25 views
1

實施例OOP:可以/應該抽象類能夠調用它自己的抽象方法嗎?

abstract class Foobar 
{ 

    abstract void myAbstractMethod(); 

    public void myConcreteMethod() 
    { 
     //busy code begin 
     myAbstractMethod(); 
     // busy code complete 
    } 

class childClass extends FooBar 
{ 

    @Override 
    public myAbstractMethod() 
    { 
    //busy code to make abstract method, concrete 
    } 

} 

這是可以接受的?這是正確的方法嗎?這是不好的設計?

+0

是的,當然,你有沒有試過? – Aubin

+0

是的,我嘗試過,它的工作原理。我只是不知道這種方法是否被忽視/糟糕的設計 – stackoverflow

+0

爲什麼它不被接受? –

回答

2

是的,你正在使用抽象類。

1

是的,這是有道理的,將是可以接受的。

1

抽象類調用自己的方法既合法又有用。

這是子類擴展抽象類行爲的一種方法。

1

你使用它,因爲它應該被使用 - 抽象的整點是,這類知道這方法有:)

1

當然,這是抽象方法的主要優點之一:您在抽象類中提供了更大的進程,但推遲了它的一部分到子類。您調用抽象方法來允許子類填充其貢獻。

1

是的。這是非常真實的。它表明您正在將實施抽象方法的責任委託給消費者,或者您可以說客戶端並且您仍在使用該方法。

事件監聽器只能以這種方式實現,當我們不知道實現時,仍然調用假設客戶端將以自己的方式處理事件的方法。

0

是的。

例如,你想要一個方法先做一些常見的工作,然後繼續進行子類型(sub-class)的具體工作。

abstract class xxx{ 
public void work(){ 
    common1(); 
    common2(); 
    specific(); 
} 

abstract void specific(); 

} 
0

這是可能的,我認爲這是很好的方法。例如,抽象類Stone可能具有實現的方法getMass()其中它調用它自己的抽象方法computeVolume()computeVolume()對於立方體或圓石來說會有所不同。

1

是的,這就是設計模式的工作原理,它允許算法的某些步驟被子類覆蓋,以允許不同子類上的不同行爲。

相關問題