我怎樣才能做到這一點:我可以從基類調用孩子的父方法嗎?
class BaseClass{
void templateMethod(){
methodImplementation();
if(this.base.getType() != typeof(BaseClass)) this.base.methodImplementation();
}
void abstract methodImplementation();
}
class Derived1 : BaseClass{
void override methodImplementation(){
.. do things ..
}
}
class Derived2 : Derived1{
void override methodImplementation(){
.. do more things ..
}
}
那麼這將導致兩個實現(的東西,更多的東西)執行。
Derived2 object = new Derived2();
object.templateMethod();
然後,所有的孩子和孫子女等等,只需要實現自己的methodImplementation的一部分,並在最後的對象調用時它會被調用在所有水平。
但是this.base不是一件東西。我需要的是調用實例化對象真實類的父對象的實現,但代碼位於baseClass中,因此我可以在Template方法模式中使用它。
在此先感謝,抱歉,如果我沒有讓自己清楚。我只需要知道它是否可以完成。這是良好的做法,最佳,推薦或有用的是我會考慮的另一件事。
編輯:
上面的代碼是不完全正確的,它應該是這樣的:
class BaseClass{
void templateMethod(){
methodImplementation();
if(this.base.getType() != typeof(BaseClass)) this.base.templateMethod();
}
void abstract methodImplementation();
}
class Derived1 : BaseClass{
void override methodImplementation(){
.. do things ..
}
}
class Derived2 : Derived1{
void override methodImplementation(){
.. do more things ..
}
}
的不同之處在於在BaseClass.templateMethod()什麼被調用在第二行是templateMethod ()而不是methodImplementation(),所以它調用它自己,但是從父類的「視角」。現在我越來越想這是不可能的,並且比任何事情都造成更多的困惑。
你應該堅持術語'Derived'和'Base',這很容易混淆你想要做的事情...... – user3292642
this.base可能不是一件東西,而只是基礎。templateMethod()應該是? – Slicc
如果您只想從派生類調用基類的方法。爲什麼你需要使方法抽象並覆蓋它? – user3292642