inheritancejava和超类(Object,Class)

所有自定义类/对象的java.lang.Object超类是隐式inheritance的吗? 我以为java不支持多重inheritance。 我问的原因是,如果我已经从我的自定义类中的另一个类inheritance,并再次java强制java.lang.Object上的隐式inheritance,是不是多重inheritance?

另外,java.lang.class类也是所有自定义类/对象的超类吗? 如果没有,如何在Javareflection我们可以得到任何类的类传递或调用isInstance任何对象?

一切都是一个对象,说你可以看到这样的结构:

 Object Animal Cat 

而不是这样:

 Object Animal Cat 

Cat在哪里延伸,它不是这最后一个例子,但是它extends AnimalCatextends Object

没有显式超类的每个类都inheritance自java.lang.Object而每个其他类都是间接inheritance的,因为当你inheritance树时,最终会在没有显式超类的类上结束,然后在Object

java.lang.Class是所有类对象的超类(不是所有对象!),例如String.class

所有自定义类/对象的java.lang.Object超类是隐式inheritance的吗?

小调整:关于下列expression式:

所有custom class/objectscustom class/objects

A类是另一个B类的超类。 B的对象或实例没有A作为它们的超类(因为它们是对象/对象实例,而不是它们本身)。最合适的描述是这些对象是B类的实例 ,它具有A作为其超类。

现在,您对java.lang.Object的问题。 它是所有可以由Java运行时实例化的超类。 这包括两个:

  1. 你写的类(自定义类),以及
  2. 由Java语言本身提供的类。

我以为java不支持多重inheritance。

它不。 它只支持单个class (或implementation )inheritance(与多个interface (或type )inheritance一起使用)。

你把inheritance与类层次混淆了。 请参阅下文。

我问的原因是,如果我已经从我的自定义类中的另一个类inheritance,并再次强制java隐式inheritance的java.lang.Object,

这对于多inheritance很好。 假设你有一个B类,你从Java提供的类inheritance(比如说A类)。 所以有一个线性的传递关系如下:

 java.lang.Object > A > B 

代表immediate parent of 。 从Objectinheritance的任何类只能有一个且只有一个 immediate parent 。 在任何时候,你都会有一个C类,任何两个类A和B的约束都不成立。

对于所有A,B {A> B→对于所有C {C> B-C == A}}

意思是,对于所有A和B类,使得A是B的immediate parent ,那么对于所有C类,C只能是B *的immediate parent 当且仅当 C本身是A.

对于单一inheritance,只要链中的每个类都有one and only one直接的父节点,则理论上可以有一个无限的inheritance链A > B > C > ... 作为一个有用的类比,这类似于自然数的predecessor关系( 0 preceedes 1 preceedes 2 which preceedes 3 ...0 preceedes 1 preceedes 2 which preceedes 3 ... )。

免责声明 :这不是你在日常编程生活中使用的东西。 但是,明确地知道这些东西是什么意思,将极大地帮助你通过面向对象的方式。

这不是多重inheritance吗?

否(见上文)与上面解释的单inheritance相反,在多inheritance中,可以有多个直接父项(如C ++所示)。

正如我们在上面的定义中注意到的那样,可传递的inheritance关系“>”是从一个类到另一个类的。 但是对于多重inheritance,关系是从一组超类{A}到一个单类{B}

  {A} > B -> forAll a {a in A <-> a > B} 

在C ++中,你可以有没有父母的类,那么集合{A}可以是空集。 在Java中,你也有多重inheritance,但仅限于interfaces (或types)。

另外,java.lang.class类也是所有自定义类/对象的超类吗?

不可以。如果您访问网上提供的Javadoc手册,这将有助于您的学习。 看看。 真。

如果没有,如何在Javareflection我们可以得到任何类的类传递或调用isInstance任何对象?

因为java.lang.Class(以及javareflection使用的所有类)的实例是其他类的元数据描述符。 这与inheritance无关。 你在这里所指的是meta-programming

而且,java.lang.Class是最后一个类; ergo,它不能成为任何东西的超类。

java.lang.Class的function是为java.lang.Object的所有实例和子类(包括java.lang.Class本身)提供元数据提供程序/描述符。与每个类关联的类字段(.ie。 String.class)是一个静态的类级字段,用于描述与该类关联的元数据。

java.lang.Class包含/描述的元数据包含方法,构造函数和字段的元数据访问器对象。 同样,这与inheritance无关。

inheritance= / =元编程。

希望它有帮助。

多重inheritance意味着一个类有多个直接前辈。 如果A从Binheritance而B从Cinheritance,那么这不是多inheritance。

我不明白第二个问题(“java.lang.class类”); 你可能想重新来阐明一下。

Object是所有其他类的超类。 当你的Child类inheritance自你的Parent类时,它不是Object的子类,但它仍然是后代,因为它的父类是Object的后代。 所以如果你不指定一个父类/父类,它将自动成为Object。 如果你指定了一个父类,那么Object仍然是一个超类,因为它在定义上是父类的超类。

Class不是每个类的父类,但是Object类指定了一个方法来获取每个类的getClass方法。

您从自身inheritance的自定义类直接或隐式地从Objectinheritance,因此您从Object间接inheritance。 该链接YourObject -> MiddleObject -> java.lang.Object 。 不需要多重inheritance。

多重inheritance是当你直接从两个不相关的类inheritance。 例如,如果你有一个class级PoliceDog直接从CaninePoliceOfficerinheritance,这将是多重inheritance。

在这种情况下,它不是多重inheritance,而是多级inheritance。
例如,假设您有一个类,Class Animal,这个类将扩展Object类,默认情况下不会扩展其他类。
还有,假设你有一个课堂动物的课程,比如说课堂狮子。 在这种情况下,Class Lion不会直接inheritanceObject Class,而是inheritance了inheritanceObject类的Class Animal,也间接inheritance了它。