2013-08-07 60 views
0

我有一個抽象類被其他幾個類擴展,每個類都有一個叫做child_save_changes()的抽象方法。從錯誤的子類調用方法的抽象類

模板類中的一種方法稱爲on_save_changes(),每當用戶單擊「提交」時,就會從另一頁調用此方法。

on_save_changes()方法首先設置驗證/保存所需的一些類變量,然後調用child_save_changes(),然後最終處理重定向回到引用頁面。

問題是,因爲我通過另一個頁面的回調調用on_save_changes(),它不知道哪個子類調用抽象方法child_save_changes(),因此它只是選取它找到的第一個子類。

在每個child_save_changes()方法中重複代碼似乎效率很低,所以我想知道是否有人在過去遇到類似的情況,以及他們採取了哪些措施來解決問題?謝謝。

+0

你所描述的聽起來不像傳統的OOP抽象實現。抽象類沒有孩子,因爲它包含多個自身的繼承實例。 – Flosculus

+0

@Flosculus - 我已經爲此[Pastebin](http://pastebin.com/mnWbUetf)添加了一個基本示例。我相信我的問題是'on_save_changes()'被獨立調用,而不是從一個子類中調用。這是否符合你對OOP抽象的期望,還是我在錯誤的道路上?謝謝。 –

回答

0

這聽起來像我正在使用靜態方法。否則,你描述的問題不能合理地發生。

您寫道:「on_save_changes()不知道從哪個子類調用抽象方法child_save_changes()」。但是普通的(即非靜態的)方法不是從類中調用的,它們是從對象中調用的。每個對象都知道它屬於哪個類,因此決不會混淆哪種方法被調用。另一方面,靜態方法的設計目的不是像這樣的繼承層次結構。我個人建議重構你的代碼並把它們變成非靜態代碼,但如果你不想這樣做,你可以使用late static binding來使它工作。

相關問題