对象 class 怎么可能是子 class 的超 class?
How can the Object class be a super class of subclasses?
事实 1:
Java does not support multiple inheritance.
事实 2:
Object is a superclass of all other classes
如果我有一个 class Parent
和一个 class Child
继承了 class Parent
:
class Parent {
}
class Child extends Parent {
}
这样的话,classChild
如何继承Object
class,如果Java不支持多重继承?
这三者之间的关系是如何定义的?
选项 1:
选项 2:
选项 2,因为每个对象都派生 Object.class 方法
这是选项 2。如果您定义一个超级class,那将是您的 class 的直接超级class。如果你不定义一个,Object
将是直接的 superclass.
class Parent {
}
class Child extends Parent {
}
等同于
class Parent extends Object {
}
class Child extends Parent {
}
因此,虽然 Object
是所有 class 的上级 class,但在到达 [=12] 之前,class 层次结构中可能有一些步骤=].它不是所有 classes 的直接 superclass。
选项 2.Object 是所有其他 类 的超类,但对象可能不是某个类的直接超类。
Object
可能不是直接的parent,但它总是超级parent。
Child extends Parent
Parent extends Object
|
V
Child [indirectly] extends Object
正确答案是选项 2。任何 Java class 都继承其 parents 的所有 parents。也就是说。
Class A 扩展 Class B
Class B 扩展 Class C
Class C 扩展 Class D
Class X extends A -> 这意味着 A 继承了 B、C 和 D 的所有 protected/package/public 字段。
在您的示例中,Class Child 继承了 Parent 属性,但也继承了传递模式下的 Object 属性。
嗯,这是一个有趣的讨论。我认为这将是选项 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
JavaDoc 说:
Class Object
is the root of the class hierarchy. ...
如果 class 没有通过使用关键字 extends
对其进行贴标来扩展任何其他 class,它会从 Object
.
隐式扩展
In the absence of any other explicit superclass, every class is
implicitly a subclass of Object.
见Example 8.1.4-1 "Direct Superclasses and Subclasses" in JLS, chapter 8.1.4
表明class Point { int x, y; }
“是对象的直接子class”
此外文档说:
Classes can be derived from classes that are derived from classes that
are derived from classes, and so on, and ultimately derived from the
topmost class, Object
. Such a class is said to be descended from all
the classes in the inheritance chain stretching back to Object
.
JLS 声明简短而正式:
The subclass relationship is the transitive closure of the direct
subclass relationship.
因此 class Object
是所有 class 的超class。
但是文档还说:
Excepting Object
, which has no superclass, every class has one and only one direct superclass (single
inheritance).
继续示例 class ColoredPoint extends Point { int color; }
“ 是 class Point
. 的直接子 class”。通过传递关系,它是 class Object
.
的(非直接)subclass
总结:
Object
是直接上级 class 或通过传递关系成为任何其他 class.
的最后一个上级 class
回答问题:
- Java不支持多继承:以传递的方式提供单继承。每个 class 只直接扩展一个 supercalss。
- 关系如何:class
Parent
对应classPoint
和class Child
到 JLS 示例的 class ColoredPoint
。只有 选项 2 显示了这种关系。
public class Object
Class Object is the root of the class hierarchy.
Every class has Object as a superclass.
All objects, including arrays, implement the methods of this class.
这意味着每个 Java class 都有 Object
作为层次结构中的根,不一定是其直接父级。
没有多重继承意味着在 Java 中一个 class 仅扩展 1 class;有一个直接基地 class。间接地,一个 class 可以有很多祖先:Child 有 Parent 和 Object 作为祖先 "super" classes.
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);
首先,使用Java8,可以完成Multiple inheritance using Default methods of interfaces。
其次,您对对象 class 的理解在 'Option 2' 中得到了正确表达。
但是,它不是多重继承,而是多级继承。 'Option 1'是多重继承。
请查看此 link 以了解有关它们的更多信息。
事实 1:
Java does not support multiple inheritance.
事实 2:
Object is a superclass of all other classes
如果我有一个 class Parent
和一个 class Child
继承了 class Parent
:
class Parent {
}
class Child extends Parent {
}
这样的话,classChild
如何继承Object
class,如果Java不支持多重继承?
这三者之间的关系是如何定义的?
选项 1:
选项 2:
选项 2,因为每个对象都派生 Object.class 方法
这是选项 2。如果您定义一个超级class,那将是您的 class 的直接超级class。如果你不定义一个,Object
将是直接的 superclass.
class Parent {
}
class Child extends Parent {
}
等同于
class Parent extends Object {
}
class Child extends Parent {
}
因此,虽然 Object
是所有 class 的上级 class,但在到达 [=12] 之前,class 层次结构中可能有一些步骤=].它不是所有 classes 的直接 superclass。
选项 2.Object 是所有其他 类 的超类,但对象可能不是某个类的直接超类。
Object
可能不是直接的parent,但它总是超级parent。
Child extends Parent
Parent extends Object
|
V
Child [indirectly] extends Object
正确答案是选项 2。任何 Java class 都继承其 parents 的所有 parents。也就是说。
Class A 扩展 Class B Class B 扩展 Class C Class C 扩展 Class D
Class X extends A -> 这意味着 A 继承了 B、C 和 D 的所有 protected/package/public 字段。
在您的示例中,Class Child 继承了 Parent 属性,但也继承了传递模式下的 Object 属性。
嗯,这是一个有趣的讨论。我认为这将是选项 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
JavaDoc 说:
Class
Object
is the root of the class hierarchy. ...
如果 class 没有通过使用关键字 extends
对其进行贴标来扩展任何其他 class,它会从 Object
.
In the absence of any other explicit superclass, every class is implicitly a subclass of Object.
见Example 8.1.4-1 "Direct Superclasses and Subclasses" in JLS, chapter 8.1.4
表明class Point { int x, y; }
“是对象的直接子class”
此外文档说:
Classes can be derived from classes that are derived from classes that are derived from classes, and so on, and ultimately derived from the topmost class,
Object
. Such a class is said to be descended from all the classes in the inheritance chain stretching back toObject
.
JLS 声明简短而正式:
The subclass relationship is the transitive closure of the direct subclass relationship.
因此 class Object
是所有 class 的超class。
但是文档还说:
Excepting
Object
, which has no superclass, every class has one and only one direct superclass (single inheritance).
继续示例 class ColoredPoint extends Point { int color; }
“ 是 class Point
. 的直接子 class”。通过传递关系,它是 class Object
.
总结:
Object
是直接上级 class 或通过传递关系成为任何其他 class.
回答问题:
- Java不支持多继承:以传递的方式提供单继承。每个 class 只直接扩展一个 supercalss。
- 关系如何:class
Parent
对应classPoint
和classChild
到 JLS 示例的 classColoredPoint
。只有 选项 2 显示了这种关系。
public class Object
Class Object is the root of the class hierarchy.
Every class has Object as a superclass.
All objects, including arrays, implement the methods of this class.
这意味着每个 Java class 都有 Object
作为层次结构中的根,不一定是其直接父级。
没有多重继承意味着在 Java 中一个 class 仅扩展 1 class;有一个直接基地 class。间接地,一个 class 可以有很多祖先:Child 有 Parent 和 Object 作为祖先 "super" classes.
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);
首先,使用Java8,可以完成Multiple inheritance using Default methods of interfaces。
其次,您对对象 class 的理解在 'Option 2' 中得到了正确表达。
但是,它不是多重继承,而是多级继承。 'Option 1'是多重继承。
请查看此 link 以了解有关它们的更多信息。