【问题标题】:Does Java not support multiple inheritance?Java不支持多重继承吗?
【发布时间】:2012-12-18 04:57:58
【问题描述】:

让我们获取两个类的实例

public abstract class Shapes
{
      public abstract void draw(Graphics g);

}

public class Rectangle extends Shapes
{
     public void draw(Graphics g)
     {
          //implementation of the method 
     }
}

这里的类Rectangle 扩展了类Shapes 并隐含地扩展了类Object。我知道没有其他扩展是可能的,但是我们不能调用继承类ShapesObject 多重继承吗? (因为继承两个类从一个角度来说就是多重继承)

【问题讨论】:

  • 多重继承是指一个类直接从一个实例中的两个或多个类继承(而不是通过它的祖先)。这就像尝试做public class Rectangle extends Shape, Point, Dimension - Java 显然做不到。
  • s/implicitly/indirectly/ :P Object 继承自 Shapes 扩展 Object。 (除Object 外,每个类都只继承一个基类。如果不指定基类,则默认为Object。)如果ShapesObject 之间存在差异,则Rectangle将始终看到 Shapes 版本。
  • 请更正您对多重继承的了解。您在问题中指的是多级继承而不是多级继承。

标签: java inheritance


【解决方案1】:

它不是多重继承。您不是从ShapesObject 继承,而是Shapes 继承,这是一个Object

多重继承仅适用于一次从 2 个类继承。

public class Rectangle extends Shapes, Figures

这在 Java 中是不允许的。

您指的是Multilevel Inheritance。谢谢@BhavikShah

【讨论】:

  • 同意。我相信 Rectacle 扩展 Shapes 和 Shapes 扩展 Object 的事实被称为传递继承。
  • @gerrytan : 我相信它叫做多级继承
【解决方案2】:

你描述的是继承的定义。一个类继承其超类的属性和方法,以及所有超类的超类。只有一条路径可以返回根目录 (Object)。在多重继承中,返回根(甚至多个根)的路径不止一条。

【讨论】:

    【解决方案3】:

    这不像Rectangle 派生自ShapesObject。但是Rectangle 是从Shapes 派生的,Shapes 是从Object 派生的,因此RectangleShape 以及Object

     Object
       |
       V
     Shapes
       |
       V
    Rectangle
    

    因此Java中没有多重继承

    【讨论】:

      【解决方案4】:

      多重继承意味着在java中是不可能的

      public class A extends B, C {
      
      }
      

      【讨论】:

        【解决方案5】:

        在java中直接多重继承是不可能的。

        但是,您可以(在一定程度上)使用接口来实现这一点。

        例如

        interface A{
        
         void m1();
        
        }
        interface B{
        
          void m2();
        
        }
        
        class C implements A,B{
        
         // it has both m1 and m2;
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-11
          • 2011-04-15
          • 1970-01-01
          • 2016-04-18
          • 2014-03-04
          • 1970-01-01
          • 1970-01-01
          • 2016-08-24
          相关资源
          最近更新 更多