选择第二个选项。如果你定义了一个超类,那么它将成为你的类的直接超类。如果你没有定义一个,Object
将成为直接超类。
class Parent {
}
class Child extends Parent {
}
等价于
class Parent extends Object {
}
class Child extends Parent {
}
因此,虽然Object
是所有类的超类,但在您到达Object
之前,类层次结构中可能会有一些步骤。它并不是所有类的直接超类。
Object
可能不是直接父类,但它总是超级父类。
Child extends Parent
Parent extends Object
|
V
Child [indirectly] extends Object
Object
和Parent extends Object
都具有相同的方法集,包括equals
,hashCode
等)。 - Andrew TobilkoJavaDoc说:
Object
类是类继承体系的根。...
如果一个类没有使用关键字extends
声明扩展任何其他类,则通过隐式从Object
继承。
文档说:
在没有任何其他显式超类的情况下,每个类都是
Object
的子类。
请参阅JLS,第8.1.4章中的示例8.1.4-1"直接超类和子类"
它表明一个class Point { int x, y; }
"是 Object 的直接子类"。JLS 简明而正式地说明了这一点:类可以派生自派生自类的类,依此类推,最终派生自顶层类 Object。这样的类被称为是从所有继承链中向后延伸到 Object 的所有类中下降的。
因此,class子类关系是直接子类关系的传递闭包。
Object
是所有类的超类。继续以示例为例,除了没有超类的 Object 外,每个类都有一个且仅有一个直接超类(单继承)。
class ColoredPoint extends Point { int color; }
"是 class Point
的直接子类。"。通过传递关系,它是 class Object
的(非直接)子类。
总结:
Object
是任何其他类的直接超类或者通过传递关系成为最后一个超类。
回答问题:
Parent
对应于JLS示例中的类Point
,而类Child
对应于类ColoredPoint
。只有选项2显示了这种关系。这是一个有趣的讨论。我认为应该选择第二个选项。如果您尝试以下代码:
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
Class child_super = c1.getSuperclass(); System.out.println(child_super.getSuperclass());
- Abhishek KeshriJava中没有多重继承,这意味着一个类只能继承1个类,即只有一个直接基类。但是一个类可以有很多祖先:子类的祖先是父类和Object类,它们是"super"类。
Object --> Parent --> Child
--> OtherChild
Relation: 1 --> N
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);
child.compareTo(anotherChild)
而没有覆盖时会发生什么(我们将调用哪个方法?) - Andrew Tobilko选项2,因为每个对象都继承了Object.class方法。
类A继承类B, 类B继承类C, 类C继承类D。
类X继承A -> 这意味着A继承了B、C和D中的所有protected/package/public字段。
在你的例子中,Child类继承了Parent类的属性,但也以传递模式继承了Object类的属性。
来自Object类
public class Object
Object类是Java类层次结构的根。
每个类都将Object作为其父类。
所有对象(包括数组)都实现了该类的方法。
这意味着每个Java类在层次结构中都将Object
作为根,但不一定是其直接父类。
选项2:Object是所有其他类的超类,但Object可能不是一个类的直接超类。
事实1
实际上有点过时了,而你可能从中获取事实2
的文档应该明确告诉你,你的选项2才是正确的。 - Jeremy Grand