2015-02-06 51 views
0

當前有一個類說A,它有最終方法mainMethod(),它調用三個方法a(),b()和c()。現在,子類必須實現a和b,所以我將它們抽象化。但可能不需要c。我如何實現它?我正在使用PHP。如何在類中實現一個可能或不可能在子類中被覆蓋的函數?

+0

請花點時間想出一個實際的代碼示例。由於該問題目前已經編寫完成,因此很難確切地看到您遇到的問題,並且此處提出的解決方案可能無法解決您希望的問題。 – 2018-02-21 12:44:16

回答

1

只需創建一個空的非抽象方法,並在註釋中描述它可能會被覆蓋。 E.g:

abstract class A 
{ 
    public abstract function a(); 
    public abstract function b(); 

    /** 
    * This method may be overwritten for purpose X ... 
    */ 
    public function c() 
    { 
     /* empty */ 
    } 
} 

這樣你就可以打電話c(),並且它可能會或可能不會有任何作用。繼承類被強制執行a()b(),並可以選擇覆蓋c()。一個像NetBeans這樣的好的PHP編輯器,或者任何能夠提示代碼的東西,其中也會顯示註釋,所以程序員會被告知函數的用途。

+0

我想到了這一點,但留下空的方法是一個不好的做法。有沒有其他方法? – Pushkar 2015-02-06 17:07:46

+0

我既不認爲這是不好的做法,也不認爲有另一種方式。你不能調用一個未定義的方法,也不能創建一個不需要實現的抽象方法。 – 2015-02-06 17:20:42

+0

一個接口可能是更好的工具來執行'a()'和'b()' – 2018-02-21 12:45:20

相關問題