方法重写-C#vs java

Vic*_*cky 4 c# java oop

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的经验.

谢谢

Jes*_*per 7

在C#中,如果要使方法可覆盖,则必须virtual在超类中使用关键字.看看你的例子,如果你已经添加virtualFood类中的方法A,输出将是2而不是1:

public class A
{
    public virtual void Food()
    {
        Console.Write("1");
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java中,没有virtual关键字.方法是自动的virtual.无法在Java中创建非虚拟方法以获得与C#相同的行为.

  • 最后一句是对的.您可以使用`final`关键字在Java中创建非虚拟方法.但是派生类不能包含具有相同名称的方法.所以你不能创造相同的行为. (2认同)