此代码示例将执行的操作非常依赖于您在此处使用的语言。你的问题在这里提到C#/ C++和Java,它们会因上述基本模式而有所不同。
C#和C++在这里非常相似,因为默认情况下函数并不是虚拟的。因此x()
x()
的调用将参考A::x
。在Java中,虽然默认方法是虚拟的,因此它将参考A::y
或B::y
,具体取决于this
的实际类型。
这里是所有3种语言的样本进行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();
请选择一种语言;每种语法和语义都是不同的。 – 2012-03-25 15:56:26
@OliCharlesworth:我不同意,问题很清楚 - 如何将上述内容翻译成三种语言中的每一种都是非常明显的。 – 2012-03-25 16:07:32
@OliCharlesworth先生刚刚采取了这个概念,我知道三种语言不一样,但谁可以写(C++/JAVA/C#)可以阅读和理解代码 – Hilmi 2012-03-26 06:55:57