This question already has answers here:
Why does Java and C# differ in oops?

(2个答案)


7年前关闭。




我有两个类A和B,其中B是从A派生的。

这两个类都有一个具有相同签名的方法。它们在Java和C#中以以下方式调用->

如果是JAVA:
class A
{
    public void print()
    {
        System.out.println("Inside Parent");
    }
}

class B extends A
{
    public void print()
    {
        System.out.println("Inside Child");
    }
}

class test4
{
    public static void main(String args[])
    {
        B b1=new B();
        b1.print();
        A a1=new B();
        a1.print();
    }
}

该程序生成以下输出:-
Inside Child
Inside Child

如果是C#:
class A
{
    public void print()
    {
        System.Console.WriteLine("Inside Parent");
    }
}

class B : A
{
    public void print()
    {
        System.Console.WriteLine("Inside Child");
    }
}

class Program
{
    public static void Main(string[] args)
    {
        B b1=new B();
        b1.print();
        A a1=new B();
        a1.print();
        System.Console.Read();
    }
}

该程序生成以下输出:-
Inside Child
Inside Parent

为什么输出不同?

最佳答案

在Java中,默认情况下方法为virtual
在C#中,默认情况下方法不是virtual

因此,为了使C#代码的行为与Java代码相同,请在基类中使方法virtual在派生类中使方法override

或者,为了使Java代码的行为与C#代码相同,请在基类中使用final方法。

10-07 12:41