class clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Parent Method Call");
}
}
class clsDerivedTest : clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Child Method Hiding Parent Method");
}
}
clsTestParent objParent = new clsTestParent();
clsTestParent objOfParentFromDerived = new clsDerivedTest();
clsDerivedTest objDerived = new clsDerivedTest();
objParent.testNoAbstract();
objOfParentFromDerived.testNoAbstract();
objDerived.testNoAbstract();
輸出:
父方法調用
父方法調用
子方法隱藏父方法爲什麼我需要聲明一個虛擬方法時,我可以在派生類中隱藏它
但是當我宣佈testNoAbstract()
爲派生類中的虛擬和超車時,輸出將如下:
Parent Method Call
Child Method Hiding Parent Method
Child Method Hiding Parent Method
早些時候我曾經認爲,如果定義爲abstract
或virtual
,我們只能重新定義派生類中的方法,但正如現在可以看到的,我們可以通過在派生類中重新定義它來隱藏父類方法。
雖然,我可以看到,通過更改代碼的輸出差異,我想知道,上述兩種方法之間有什麼區別,以及它爲什麼會產生不同的輸出。