このコードサンプルは、ここで使用している言語に非常に依存しています。あなたの質問はC#/ C++とJavaをここで言及しており、上記の基本パターンとは異なります。
C#とC++は、関数がデフォルトでは仮想ではないという点ではかなり似ています。したがって、x()
の呼び出しは、を参照してx()
を参照します。 Javaでは、メソッドはデフォルトでは仮想であるため、実際のタイプはthis
に応じてA::y
またはB::y
のいずれかを参照します。ここで
y()
は仮想呼び出し可能
C++
class A {
public:
void x(){ y(); }
virtual void y(){}
};
class B : public A {
public:
// virtual not needed here but nice
virtual void y() { };
void a() { x(); }
};
B* b = new B();
b->a();
C#
class A {
public void x(){ y(); }
public virtual void y(){}
}
class B : public A {
public overrides void y() { };
public void a() { x(); }
};
B b = new B();
b.a();
のJava
class A {
public void x(){ y(); }
public void y(){}
}
class B : inherits A {
public void y() { };
public void a() { x(); }
};
B b = new B();
b.a();
を作るために、すべての3つの言語でのサンプルである一つの言語を選択してください;構文とセマンティクスはそれぞれ異なります。 –
@OliCharlesworth:私は同意しません。質問は明らかです。そして、上記を3つの言語のそれぞれにどのように翻訳するのかは非常に明白です。 –
氏@OliCharlesworthちょうど概念を取る、私は3つの言語が同じではないが誰が書くことができます知っている(C + +/JAVA/C#)コードを読んで理解することができます – Hilmi