【问题标题】:Difference in inheritance in C# and Java [duplicate]C#和Java中继承的差异[重复]
【发布时间】:2014-04-25 17:36:04
【问题描述】:

我和我的 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.");
        }
    }
}

给我这个结果:

从基类显示。

而这段代码在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();
    }
}

给我这个结果:

从派生

为什么.NET调用基类函数而java调用派生类函数? 如果有人能回答这个问题,或者只是提供一个链接,我将不胜感激。

我希望提供的代码没有问题。

【问题讨论】:

  • 你没有在 csharp 中覆盖。
  • @SotiriosDelimanolis 所以你的意思是在java中它会自动被覆盖

标签: c# java inheritance


【解决方案1】:

不同之处在于,当您在 Java 中“覆盖”Show 方法时,您会在 C# 版本中“隐藏”它。

要获得相同的行为:

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

【讨论】:

    【解决方案2】:

    在java中,每个方法默认都是虚拟的并且没有必要将方法标记为被覆盖。在 C# 中,您必须指定 virtual 和 override 关键字,否则它实际上是一种新方法。您将收到警告,应选择 new 或 override 关键字来隐藏此警告。

    注意:Java 有一个可以使用的属性,@Override,但它的使用是可选的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多