【问题标题】:is this Multiple Inheritance? (JAVA)这是多重继承吗? (JAVA)
【发布时间】:2014-07-31 08:21:46
【问题描述】:

谁能解释一下下面的代码是多重继承的例子吗?如果不是为什么?因为有两个父类(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();
    }
}

【问题讨论】:

  • 实现 != 扩展
  • I access it through child eel1 : ee1ww1qq1父级。你的问题没有意义。
  • 我只看到“eel”的 2 个实现,并且在任何地方都没有继承。
  • 你的代码也是hasA而不是isA
  • @MarkoTopolnik 我知道 ee1 是两个班级的父母。好的,以 C 语言为例:三个类:A 类、B 类、C 类和 D 类扩展了所有三个 A、B、C 类现在我可以通过 D 类访问 A、B、C 类的属性,所以这种类型继承权称为多重继承权。现在,如果我在所有这四个类中定义类 A、B、C、D 并实现接口 ee1,则与上面的代码相比,如果我通过接口 ee1 访问所有四个类属性,则与此类型的继承相比,这种类型的继承是多重继承根据我的想法。

标签: java multiple-inheritance


【解决方案1】:

只是为了理清你的主张,你写了

        ww1 ob=new ww1();
        qq1 ob1=new qq1();
        ee1 rr;
        rr=ob;
        rr.s();
        rr=ob1;
        ob1.s();

一句话,

  • ww1ee1 的子类型;
  • qq1ee1 的另一个子类型;
  • 您可以通过变量rr(类型为ee1)访问ww1qq1 的实例;
  • 您声称这构成了多重继承。

您的声明在几个方面是错误的:

  1. 您的示例只是关于运行时类型多态动态方法分派:通过公共接口访问不同的行为;
  2. 我可以解释术语 多重继承 对您的问题有意义的唯一方法是“一个类型可以有多个继承自它的子级”。这是:

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

    b) 对术语“多重继承”的错误解释,它与一个类可能有两个父类的情况有关。

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

【讨论】:

    【解决方案2】:

    由于以下几个原因,您的示例似乎不正确:

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

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

    3. 您可能将通过其父接口类型之一(例如ee1)引用对象的能力误认为是多重继承。

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

    • 你有ww1实现ee1
    • 您有qq1,它也实现 ee1 并且与ww1 无关。
    • 你有GEN_INTERFACE(它实际上是一个类,而不是一个接口),根本不使用继承。
    • 您可以从静态方法main 中的代码访问ww1qq1 的公共成员,这也与继承无关。
    • 您可以通过ee1 的父类型ww1qq1 访问上述成员。这只是普通的旧运行时多态性。

    现在,话虽如此,即使您的示例是继承的,Java 也不支持多重继承。它确实支持继承多个接口,但 definition 表示,这不是多重继承,尽管它具有它的一些特性:

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

    您可以在此处和其他地方阅读有关多重继承的详细信息。

    多重继承看起来像这样,例如C++:

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

    Java 中没有等价物;但请注意,造成“多重继承”的关键是Derived 继承自 多个 基类。

    【讨论】:

      【解决方案3】:

      Java 中不能有多重继承。您只能在 C++ 中使用它。

      根据定义,多重继承意味着扩展多于 1 个类。由于菱形问题,任何 OOP 语言都不允许您进行多重继承。

      但是 C++ 通过编译器是 OOP,因此他可以针对多重继承产生的模糊定义进行编译时检查。

      发帖前请谷歌:

      http://en.wikipedia.org/wiki/Multiple_inheritance

      【讨论】:

      • 虽然这可能是真的,但它并不能回答问题。
      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 2011-10-17
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多