Java 这是多重继承吗?(爪哇)

Java 这是多重继承吗?(爪哇),java,multiple-inheritance,Java,Multiple Inheritance,有人能给我解释一下下面的代码是多重继承的一个例子吗?如果不是,为什么?因为有两个父类ww1,qq1和我通过子类ee1访问它。因此,正如我所想,多重继承是在java中完成的,就像这样。我说得对吗 interface ee1{ public void s(); } class ww1 implements ee1{ public void s() { System.out.println(" In Class WW1"); } } class qq1 imp

有人能给我解释一下下面的代码是多重继承的一个例子吗?如果不是,为什么?因为有两个父类ww1,qq1和我通过子类ee1访问它。因此,正如我所想,多重继承是在java中完成的,就像这样。我说得对吗

interface ee1{
    public void s();
}
class ww1 implements ee1{
   public   void s() {
        System.out.println(" In Class WW1");
    }
}
class qq1 implements ee1{
   public void s(){
        System.out.println("In Class qq1");
    }
}
class GEN_INTERFACE{
    public static void main(String[] rrrr){
            ww1 ob=new ww1();
            qq1 ob1=new qq1();
            ee1 rr;
            rr=ob;
            rr.s();
            rr=ob1;
            ob1.s();
    }
}

您的示例似乎不正确,原因如下:

您可能将实现同一根接口的多个类误认为是多重继承,多重继承实际上是指从多个根继承的单个类

您可能将类的公共成员的简单访问误认为是继承概念中描述的父类特性的访问类型

您可能误解了通过对象的父接口类型(例如ee1)将对象引用为多重继承的能力

在您的示例中,您没有任何多重继承,或者根本没有任何继承。您所拥有的是:

您拥有实现ee1的ww1。 qq1也实现了ee1,与ww1无关。 您有GEN_接口,它实际上是一个类,而不是一个接口,并且根本不使用继承。 您可以从静态方法main中的代码访问ww1和qq1的公共成员,该方法也与继承无关。 您可以通过ww1和qq1的父类型ee1访问上述成员。这只是简单的旧运行时多态性。 现在,所有这些都说明了,即使您的示例是继承,Java也不支持多重继承。它确实支持继承多个接口,但实际上,这不是多重继承,尽管它具有以下一些功能:

一些面向对象的语言,如C、Java和Ruby实现了单继承,尽管协议或接口提供了一些真正的多重继承功能

您可以在那里和其他地方阅读更多关于多重继承的详细信息

多重继承在C++中是这样的:

class Base1 { ... };

class Base2 { ... };

class Derived : public Base1, public Base2 { ... };

Java中没有等价物;但是请注意,多重继承的关键是派生继承来自多个基类。

在Java中不能有多重继承。只能在C++中使用.< /P> 根据定义,多重继承意味着扩展一个以上的类。由于菱形问题,任何OOP语言都不允许多重继承

但是,C++是通过编译器进行OOP的,所以他可以对来自多重继承的冗长定义进行编译时检查。 请在发布前搜索:


为了澄清你的说法,你写了

        ww1 ob=new ww1();
        qq1 ob1=new qq1();
        ee1 rr;
        rr=ob;
        rr.s();
        rr=ob1;
        ob1.s();
换句话说

ww1是ee1的一个亚型; qq1是ee1的另一个亚型; 通过变量rr访问ww1和qq1的实例,该变量的类型为ee1; 您声称这构成了多重继承。 你的要求在几点上是错误的:

您的示例只是关于运行时类型多态性和动态方法调度:通过公共接口访问不同的行为; 我能解释多重继承这个术语对你的问题有意义的唯一方法是,一个类型可以有多个子元素从中继承。这是:

适用于Java和所有其他具有类层次结构的语言

b对术语多重继承的错误解释,该术语适用于一个类可能有两个父类的情况


我希望我猜对了您的实际问题。

implements!=extendsI通过子eel1访问它:ee1是ww1和qq1的父级。你的问题没有道理。我只看到了两个eel实现,而且没有任何继承。你的代码也没有isA@MarkoTopolnik我知道ee1是两个班级的家长。以C语言为例:三个类:类A,类B,类C和类D扩展了所有三个类A,B,C现在我可以通过类D访问类A,B,C的属性,所以这种类型的继承称为多重继承权。现在,如果我在这四个类中定义了类A、B、C、D并实现了接口ee1,如果我通过接口ee1访问了所有四个类属性,那么这里的事情是一样的,按照我的想法,这种类型的继承是多重继承。虽然这可能是真的,但它并没有回答这个问题。