私は、仮想メソッドの使用法がメソッド/関数のデフォルトの動作を提供することを学びました。私のクエリは、派生クラスで "new"を使用して同じ名前のメソッド(基本クラスと同じ)を実装でき、オブジェクト別に呼び出すことができるときに仮想メソッドを使用することです。例えば;私たちは、同じコンパイル時のオブジェクトを使用して、デフォルトの動作と同様に導出動作を提供などのクラスAとBの両方の時間オブジェクトを実行することができたときに、クラスAの仮想メソッドを使用しているのは、単一インスタンス生成の利点のみですか?
class A
{
public void F()
{
//default behavior
}
public virtual void G()
{
//default behavior
}
}
class B:A
{
new public void F()
{
//new behavior from that of class A
}
public override void G()
{
//new behavior from that of class A
}
}
class Test
{
public static void Main(string[] args)
{
//For calling A's method use same compile time and run time object
A obj1 = new A();
//For calling B's method use compile time object of A and run time of B
A obj2 = new B();
obj1.F(); //O/P is A's method result
obj2.F(); //O/P is A's method result
obj1.G(); //O/P is A's method result
obj2.G(); //O/P is B's method result
}
私の質問は、なぜ仮想G(ある)が必要とされています。
A obj1 = new A(); //for calling A's methods
B obj2 = new B(); //for calling B's methods
A obj3 = new B(); //for having default behavior of class A using B's run time object.
私がフェッチしたのは、バーチャルの場合、同じコンパイルとランタイムタイプのオブジェクトをもう1つ作成する必要はありません。これは、タイプAのコンパイル時とタイプBの実行時である単一のオブジェクトによって実現することができます。
おそらく私の心は返信によって解決されません...私はそれをはっきりと得ることができません。より現実的な感触を与えることができますか、迅速な答えのためにはいありがとうございます。 – user1740176
「よりリアルなタッチ」が何を意味するのか分かりません。 –
ご迷惑をおかけして申し訳ありません。私はそれを求めようとしていました:仮想メソッドの使用はメモリだけを節約していますか?もっと多くのオブジェクトを作成しないようにするか、それとも異なる理由もありますか?リアルなタッチで、私は実生活の例を意味しました。 – user1740176