对象Class(多态、铸造)
Object Class (polymorphism, casting)
我是学习新手 Java,我刚刚读到关于对象 class 作为所有对象的超级class。我现在想知道,如果我想创建更多 classes(根据多态性规则)并且对象 class 应该在“顶部”,我可以创建它还是应该将其视为“默认”?
Java中的Object
class是所有classes的根。
您每 class 隐式创建 extends Object
。虽然那些 class 定义是相等的:
class MyClass { }
class MyClass extends Object { }
extends Object
部分由编译器自动为您完成。
如果您有一个 class 层次结构,那么此层次结构中的第一个 class 始终(隐含地)是 Object
:
class A { } // A will implicitly extend Object
class B extends A { } // though B is of type Object, too, because A is, too
这就是为什么您可以将所有内容(原始类型除外)转换为 Object
的原因:
A a = new A(); // works
B b = new B(); // works
Object a = new A(); // works, because A implicitly extends Object
Object b = new B(); // works, because B extends A, and A extends Object, and though B extends Object, too
A a = new B(); // works, because B extends A
B b = new A(); // fails, because A does not extend B
通常你永远不会自己写extends Object
,因为它是由Java自动为你完成的。
我是学习新手 Java,我刚刚读到关于对象 class 作为所有对象的超级class。我现在想知道,如果我想创建更多 classes(根据多态性规则)并且对象 class 应该在“顶部”,我可以创建它还是应该将其视为“默认”?
Java中的Object
class是所有classes的根。
您每 class 隐式创建 extends Object
。虽然那些 class 定义是相等的:
class MyClass { }
class MyClass extends Object { }
extends Object
部分由编译器自动为您完成。
如果您有一个 class 层次结构,那么此层次结构中的第一个 class 始终(隐含地)是 Object
:
class A { } // A will implicitly extend Object
class B extends A { } // though B is of type Object, too, because A is, too
这就是为什么您可以将所有内容(原始类型除外)转换为 Object
的原因:
A a = new A(); // works
B b = new B(); // works
Object a = new A(); // works, because A implicitly extends Object
Object b = new B(); // works, because B extends A, and A extends Object, and though B extends Object, too
A a = new B(); // works, because B extends A
B b = new A(); // fails, because A does not extend B
通常你永远不会自己写extends Object
,因为它是由Java自动为你完成的。