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
Animal
的Cat
, extends
Object
。
没有显式超类的每个类都inheritance自java.lang.Object
而每个其他类都是间接inheritance的,因为当你inheritance树时,最终会在没有显式超类的类上结束,然后在Object
。
java.lang.Class
是所有类对象的超类(不是所有对象!),例如String.class
。
所有自定义类/对象的java.lang.Object超类是隐式inheritance的吗?
小调整:关于下列expression式:
所有
custom class/objects
超custom class/objects
A类是另一个B类的超类。 B的对象或实例没有A作为它们的超类(因为它们是对象/对象实例,而不是它们本身)。最合适的描述是这些对象是B类的实例 ,它具有A作为其超类。
现在,您对java.lang.Object
的问题。 它是所有可以由Java运行时实例化的超类。 这包括两个:
- 你写的类(自定义类),以及
- 由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的自定义类直接或隐式地从Object
inheritance,因此您从Object间接inheritance。 该链接YourObject -> MiddleObject -> java.lang.Object
。 不需要多重inheritance。
多重inheritance是当你直接从两个不相关的类inheritance。 例如,如果你有一个class级PoliceDog
直接从Canine
和PoliceOfficer
inheritance,这将是多重inheritance。
在这种情况下,它不是多重inheritance,而是多级inheritance。
例如,假设您有一个类,Class Animal,这个类将扩展Object类,默认情况下不会扩展其他类。
还有,假设你有一个课堂动物的课程,比如说课堂狮子。 在这种情况下,Class Lion不会直接inheritanceObject Class,而是inheritance了inheritanceObject类的Class Animal,也间接inheritance了它。