代码之家  ›  专栏  ›  技术社区  ›  Abhishek Keshri

对象类怎么可能是子类的超类呢?

  •  12
  • Abhishek Keshri  · 技术社区  · 7 年前

    事实2:

    对象是所有其他类的超类

    如果我有课 Parent 还有一节课 Child 起源 :

    class Parent {
    
    }
    
    class Child extends Parent {
    
    }
    

    在这种情况下,课堂将如何进行 继承 Object 类,如果Java不支持多重继承?

    方案1:

    enter image description here

    方案2:

    enter image description here

    10 回复  |  直到 7 年前
        1
  •  26
  •   Max Vollmer    7 年前

    这是第二种选择。如果您定义了一个超类,它将是类的直接超类。如果你不定义一个, Object

    class Parent {
    
    }
    
    class Child extends Parent {
    
    }
    

    相当于

    class Parent extends Object {
    
    }
    
    class Child extends Parent {
    
    }
    

    所以,虽然 是所有类的超类,在进入 . 它不是所有类的直接超类。

        2
  •  9
  •   Andrew    7 年前

    Object 可能不是直接父母,但总是超级父母。

    Child extends Parent
    Parent extends Object
    
     |
     V
    
    Child [indirectly] extends Object
    
        3
  •  7
  •   LuCio    7 年前

    这个 JavaDoc

    Object

    如果一个类没有通过使用关键字对其进行贴花来扩展任何其他类 extends 它从 对象

    这个 documentation

    在没有任何其他显式超类的情况下,每个类都是

    看到了吗 Example 8.1.4-1 直接超类和子类 “在 JLS, chapter 8.1.4

    它表明 class Point { int x, y; } " "

    而且文件上说:

    最顶级, 对象 . 这样一个阶级据说是所有人的后裔

    JLS简短而正式地指出:

    子类关系。

    因此类 对象 是所有类的超类。

    但文件上也说:

    例外 ,它没有超类,每个类都有一个且只有一个直接超类(单个)

    接着举一个例子 class ColoredPoint extends Point { int color; } " 是类的直接子类 Point . 对象 .

    总结:
    对象 是直接超类或按传递关系是任何其他类的最后一个超类。

    回答问题:

    • Java不支持多重继承 :它以传递方式提供单一继承。每个类只直接扩展一个超类。
    • :班级 Parent 还有班级 Child ColoredPoint 以JLS为例。仅限 显示了这种关系。
        4
  •  5
  •   codeLover Sumit Tyagi    7 年前

    public static void main(String []args){
          Parent p=new Parent();
          Class c= p.getClass();
    
          Child child =new Child();
          Class c1= child.getClass();
          System.out.println(c.getSuperclass());
          System.out.println(c1.getSuperclass());
    
     }
    

    您将得到如下输出:

    class java.lang.Object 
    class Parent
    
        5
  •  3
  •   Alexander Khlystov    7 年前

    选项2,因为每个对象都派生Object.class类方法

        6
  •  3
  •   admoca60    7 年前

    B级扩展C级

    类X扩展了A->这意味着A继承了B、C和D的所有受保护/包/公共字段。

    在您的示例中,类Child继承父属性,但也继承传递模式中的对象属性。

        7
  •  3
  •   Community Mohan Dere    6 年前

    Class Object

    public class Object
    类对象是类层次结构的根。

    这意味着每个Java类都有 Object 作为层次结构中的根,不一定是它的直接父级。

        8
  •  3
  •   Joop Eggen    7 年前

    Object --> Parent --> Child
                      --> OtherChild
    
    Relation: 1 --> N
    

    在C++中避免多重继承的原因是涉及到的歧义:

    假设多重继承的伪代码:

    class A : Comparable
    class B : Comparable
    
    class Child : A, B {
    
        @Override A? B?
        int compareTo(Child rhs) { ... super.compareTo ? ... }
    }
    
    A a = new Child();
    B b = new Child();
    a.compareTo(b);
    
        9
  •  3
  •   Shashank Singh    7 年前

    首先, 使用Java8,这是可能的 完成 Multiple inheritance using Default methods of interfaces

    第二,您对对象类的理解在“选项2”中得到了正确的表达。
    然而,它不是多重继承,而是多层次继承选项1'是多重继承。

    link 了解更多关于他们的信息。

        10
  •  2
  •   zzcron toby    7 年前

    选项2.对象是所有其他类的超类,但对象不能是类的直接超类。