是否隐式继承了所有自定义类/对象的java.lang.Object
个超类?我以为java不支持多重继承。我问的原因是我是否已经从我的自定义类中的另一个类继承而且java在它之上强制隐式继承java.lang.Object
,它不是多重继承吗?
另外,java.lang.class类是否也是所有自定义类/对象的超类?如果没有,在java反射中我们如何获得传递的任何类的类或者在任何对象上调用isInstance?
答案 0 :(得分:5)
没有显式超类的每个类都继承自java.lang.Object
,并且每个其他类间接地从它继承,因为当你继承继承树时,你最终会在没有显式超类的类结束,然后在{{1 }}
Object
是所有类对象的超类(不是所有对象!),例如java.lang.Class
。
答案 1 :(得分:2)
是java.lang.Object的超类 自定义类/对象继承 隐式?
小修正:关于以下表达式:
所有
的超类custom class/objects
班级 A 是另一个班级 B 的超类。 B 的对象或实例没有 A 作为其超类(因为它们是对象/对象实例,而不是类本身。)最合适描述是这些对象是 B 类的实例,其 A 作为其超类。
现在,关于java.lang.Object
的问题。它是可以由java运行时实例化的所有东西的超类。这包括:
我认为java不支持多个 继承。
没有。它仅支持单class
(或implementation
)继承(与多个interface
(或type
)继承相结合。
您将继承与类层次结构混淆。请参阅下文。
我问的原因是我是否已经 从我的另一个类继承 自定义类和java再次强制 隐式继承 java.lang.Object就在它上面,
多重继承就没问题了。假设你有一个B类继承自Java已经提供的类(比如A类)。所以有一个线性,传递的关系如下:
java.lang.Object > A > B
>
代表immediate parent of
。从Object继承的任何类只能有一个且只有一个 immediate parent
。在任何时候你都没有C级,对于任何两个A类和B类都没有以下约束:
对于所有A,B {A> B - > forAll C {C> B - < - > C == A}}
意思是,对于所有A类和B类,A是B的immediate parent
,那么对于所有类C,C只能是B * 的immediate parent
当且仅当 C本身就是A.
使用单一继承,只要链中的每个类都在A > B > C > ...
个直接父级之前,就可以(理论上)拥有无限继承链one and only one
。作为一个有用的类比,这类似于自然数中的predecessor
关系(0 preceedes 1 preceedes 2 which preceedes 3 ...
)。
免责声明:这不是您在日常编程生活活动中使用的内容。但是,准确了解这些内容对于引擎盖的意义将极大地帮助您完成面向对象。
是不是多重继承?
否(参见上文。)与单继承相反 - 如上所述 - 在多重继承中,您可以拥有多个直接父级(如C ++中所示)。
正如我们在上面的定义中所注意到的那样,传递继承关系'>'从一个班级到另一个班级。但是对于多重继承,关系是从一组超类{A}
到单个类{B}
:
{A} > B -> forAll a {a in A <-> a > B}
在C ++中你可以拥有没有父项的类,那么集合{A}
可以是空集。在java中,您还有多重继承,但仅限于interfaces
(或类型。)
另外,java.lang.class类也是 所有自定义的超类 类/对象?
没有。如果您访问在线提供的Javadoc手册,它将有助于您的学习。仔细看看。真。
如果没有,我们可以在java反射中如何 获取任何类的类类型 任何传递或调用isInstance 对象
因为java.lang.Class的实例(以及java反射使用的所有类)是其他类的元数据描述符。这与继承无关。您在此引用的内容称为meta-programming
。
此外,java.lang.Class是一个最终类;因此,它不可能是任何东西的超类。
java.lang.Class的函数是java.lang.Object的所有实例和子类的元数据提供者/描述符(包括java.lang.Class本身。)与每个类关联的类字段( .ie.String.class)是一个静态的类级别字段,用于描述与该类关联的元数据。
java.lang.Class包含/描述的元数据包含方法,构造函数和字段的元数据访问器对象。同样,这与继承无关。
继承= / =元编程。
希望它有所帮助。
答案 2 :(得分:1)
多重继承意味着一个类有多个直接前辈。如果A继承自B,而B继承自C,则这不是多重继承。
我不明白第二个问题(“java.lang.class Class”);你可能想重新说明一下。
答案 3 :(得分:1)
Object
是每个其他类的超类。当您的Child
类继承自Parent
类时,它不是Object
的子级,但它仍然是后代,因为它的父级是Object
的后代。
因此,如果您未指定超类/父类,它将自动为Object。如果确实指定了父类,那么Object
仍然是超类,因为它根据定义是父类的超类。
Class
不是每个类的超类,但Object
类指定了使用Class
方法获取每个类的getClass
的方法。
答案 4 :(得分:1)
一切都是对象,表示你可以看到这样的结构:
Object
Animal
Cat
而不是这样:
Object Animal
Cat
Cat
扩展两者,它不像最后一个示例,但是Cat
extends
Animal
extends
。Object
。{ / p>
答案 5 :(得分:1)
您从自身继承的自定义类直接或隐式地从Object
继承,因此您间接从Object继承。链转到YourObject -> MiddleObject -> java.lang.Object
。不需要多重继承。
多重继承是指直接从两个不相关的类继承。例如,如果您有一个直接从PoliceDog
和Canine
继承的班级PoliceOfficer
,那么这将是多重继承。
答案 6 :(得分:0)
在这种情况下,它不是多重继承而是多层次
继承。
例如,让我们说你有一个班级说,Class Animal,
这个类将扩展Object类,默认情况下不扩展
其他课程。
我们也假设,你有一个扩展的类
Class Lion,Class Lion。在这种情况下,Class Lion不会
直接继承Object Class但由于它继承了Class
继承Object类的Animal,它也间接继承
它