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
と定義されていますが、これから分かるように、派生クラスで再定義するだけで親クラスメソッドを非表示にできます。
コードを変更することで出力の違いがわかりますが、私が知りたいのですが、上記の2つの方法の違いは何ですか?