【发布时间】:2016-06-02 05:22:53
【问题描述】:
我在玩多态性概念。我认为所有 OOP 概念在每种语言中都是相同的(几乎)。我编译并运行了这段代码,但 java 和 c# 给出了不同的答案:
public class Employee
{
// constructor implemented
public void mailCheck()
{
Console.WriteLine("In Employee Method\n Mailing a check to "+ this.name+ " " + this.address);
}
}
public class Salary : Employee
{
//constructor implemented
public void mailCheck()
{
Console.WriteLine("Within mailCheck of Salary class ");
Console.WriteLine("Mailing check to " + getName() + " with salary " + salary);
}
}
class driver
{
static void Main(string[] args)
{
Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
e.mailCheck();
}
}
如果我在 java 中运行此代码,它会调用薪金类方法,如果我在 c# 中运行此代码,它会调用员工类方法。
为什么会这样?
【问题讨论】:
-
阅读 C# 中的
virtual,该功能在 Java 中“始终开启”,但在 C# 中是可选的。 Here is why. -
在 c# 中查找“覆盖”。
-
@JoachimIsaksson 我知道在 c# 中覆盖,我们可以在 c# 中覆盖虚拟方法。是不是意味着我们不用在java中显式写virtual和override关键字,而在c#中我们必须写这些词来覆盖基类方法?
-
@MOHSIN 没错。如果基类中的方法不是虚拟方法,则不能在子类中覆盖它。
-
@MOHSIN 确切地说,在 Java 中你不需要编写这些。默认是隐含的
标签: java c# overriding virtual