多重继承

The*_* do 2 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()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

虽然有趣的事情.在上面声明了这些类(在NetBeans中)后,我看到在创建了类C的实例(在main中)之后,我无法在它上调用methodFromC,这是在这个类中定义的方法.

这是什么原因?

谢谢.

mdm*_*dma 7

即使您正在创建一个实例C,C的方法是否可见依赖于您正在使用的编译时类型.例如,

C c = new C();
c.methodFromC();  // fine
Run Code Online (Sandbox Code Playgroud)

是有效的,但是

A a = new C();
a.methodFromC();  // compiler error
Run Code Online (Sandbox Code Playgroud)

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

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

  • 使用您现在发布的代码,我不明白为什么会出现问题.您是否尝试过实际输入方法以查看代码是否编译?自动完成和编译并不总是一样的!否则,请仔细检查访问修饰符(将所有内容公开)并仔细检查您是否使用小写c,即`c.methodOnC()`.如果C.是大写的t将不起作用,因为这将意味着静态方法. (2认同)

vul*_*ino 6

我同意mdma.另请注意,这不是多重继承,这是链式继承.多重继承是当一个类在从不止一个类继承同一时间:

class A {}
class B {}

class C extends A, B {}
Run Code Online (Sandbox Code Playgroud)

如果你没有用C++编码,这是禁止的