c# - C#和Java中继承的区别

标签 c# java inheritance

<分区>

我和我的 Java 程序员 friend 正在讨论继承。当我们对同一种代码得到不同的结果时,对话几乎达到了顶峰。 我在 .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.");
        }
    }
}

给我这个结果:

Show From Base 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();
    }
}

给我这个结果:

From Derived

为什么.NET调用基类函数而java调用派生类函数? 如果有人能回答这个问题,或者只是提供一个链接,我将非常感激,我可以消除这种困惑。

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

最佳答案

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

要获得相同的行为:

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

关于c# - C#和Java中继承的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299580/

相关文章:

c# - 异步数据库查询触发存储过程

c# - 访问子类中 protected 成员

c# - 如何在 C# 中不提供全局/静态变量的情况下实现单例模式?

java - getter 是否应该返回对象实例的副本以避免副作用?

c++ - 我可以知道哪些 C++ 编译器(在线/免费)支持 c++0x 中的 "inheriting constructors"功能吗

c# - Entity Framework 6 不保存更改

Java 从 findFirst() 返回一个 Optional<String>

java - 我可以在 Java 中公开 protected 成员吗?我想从子类访问它

c++ - 什么时候不希望派生类的析构函数执行?

c++ - 继承: 'A' 是 'B' 的不可访问的基础