c# - 多重继承

标签 c# java inheritance

伙计们,在你们开始对我投反对票之前,请阅读这个问题,并请理解我不想在这里开始任何不愉快的事情。

这个问题的唯一原因是我越来越意识到,为了更容易就业,我必须了解 Java 和/或 C#。

好的,问题来了:

我知道 J 和 C# 中禁止多重继承。但是如果我这样做(因为我想要一个继承自两个类 B 和 A 的类):

//code in Java
public class B
{
    public void methodFromB()
    {
    }
}

public class A extends B
{
    public void  methodFromA()
    {
    }
}

public class C extends A
{
    public void methodFromC()
    {
    }
}

所以事实上,据我所知,我确实继承了它们(A 和 B,是的,我确实理解对此的正式解释是对象 A 是一个专门的 B 但如果我想要的话我会去做,但它看起来不太漂亮)

但是我必须先创建一个继承自另一个类的类,然后从它派生,而不是在一个声明中执行此操作?

虽然很有趣。如上所述(在 NetBeans 中)声明了这些类后,我发现在创建了类 C 的实例(在 main 中)之后,我无法在其上调用 methodFromC,这是该类中定义的方法。

这是什么原因呢?

谢谢。

最佳答案

即使您正在创建 C 的实例,C 的方法是否可见取决于您使用的编译时类型。例如,

C c = new C();
c.methodFromC();  // fine

有效,但是

A a = new C();
a.methodFromC();  // compiler error

不是,因为编译时类型是 A,它没有声明 methodFromC

请注意,由于 C 和 A 都是 B 的子类,因此在这两种情况下都可以调用 methodFromB

关于c# - 多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3466783/

相关文章:

C# 在具有锁定位置的窗体中嵌入命令提示符

c# - 如何格式化没有尾随零的小数

java - 从多个项目创建 JAR 文件,相互依赖

java - 带有注释的模式序列化也被序列化

c# - 是否可以强制接口(interface)实现在 C# 中是虚拟的?

c# - 扩展基础移动 Azure 示例(.net 后端)

java - 从 RecyclerViewAdapter 启动 BottomSheet,该 RecyclerViewAdapter 扩展了 onBindViewHolder 内的 RecyclerView.Adapter

c++ - 具有不同签名的两个函数的继承隐藏了非虚函数

c++ - 非虚拟单继承类层次结构中的基指针一致性

c# - Web API - 返回复杂对象列表时出错