Java中的方法覆盖原则是否与C#不同?我为c#工作,现在要求在java中调试代码.
它只是为了澄清我的概念.我有一个代码覆盖c#中的方法.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
public class A
{
public void Food()
{
Console.Write("1");
}
}
public class B : A
{
public void Food()
{
Console.Write("2");
}
}
public class program
{
static void Main(string[] args)
{
A a = new B();
a.Food();
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT -1(毫无疑问)(在C#中)但是当我在java中执行相同的代码时,我输出为"2".只是好奇地知道原因,因为压倒一切的原则在语言上可能有所不同.我没有java的经验.
谢谢
在C#中,如果要使方法可覆盖,则必须virtual在超类中使用关键字.看看你的例子,如果你已经添加virtual到Food类中的方法A,输出将是2而不是1:
public class A
{
public virtual void Food()
{
Console.Write("1");
}
}
Run Code Online (Sandbox Code Playgroud)
在Java中,没有virtual关键字.方法是自动的virtual.无法在Java中创建非虚拟方法以获得与C#相同的行为.