C#和Java中的继承差异

Rav*_*avi 7 c# java inheritance

我和我的朋友,他是一名Java程序员,正在讨论继承问题.当我们为相同类型的代码得到不同的结果时,对话几乎达到了高度.我在.NET中的代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Base objBaseRefToDerived = new Derived();
            objBaseRefToDerived.Show();

            Console.ReadLine();
        }
    }

    public class Base
    {
        public virtual void Show()
        {
            Console.WriteLine("Show From Base Class.");
        }
    }

    public class Derived : Base
    {
        public void Show()
        {
            Console.WriteLine("Show From Derived Class.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

给我这个结果:

从基类显示.

而这段代码用Java编写

public class Base {
    public void show() {
        System.out.println("From Base");
    }
}

public class Derived extends Base {
    public void show() {
        System.out.println("From Derived");
    }

    public static void main(String args[]) {
        Base obj = new Derived();
        obj.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

给我这个结果:

来自派生

为什么.NET调用Base类函数和java调用派生类函数?如果有人能够回答这个问题,或者只是提供一个可以清除这种混淆的链接,我将非常感激.

我希望提供的代码没有任何问题.

Ale*_*kov 8

不同之处在于您Show在Java中"覆盖"它时在C#版本中"隐藏" 方法.

要获得相同的行为:

public class Derived : Base
{
    public override void Show()
    {
        Console.WriteLine("Show From Derived Class.");
    }
}
Run Code Online (Sandbox Code Playgroud)