java和Superclasses(Object,Class)中的继承

时间:2010-12-15 16:40:45

标签: java class object multiple-inheritance

是否隐式继承了所有自定义类/对象的java.lang.Object个超类?我以为java不支持多重继承。我问的原因是我是否已经从我的自定义类中的另一个类继承而且java在它之上强制隐式继承java.lang.Object,它不是多重继承吗?

另外,java.lang.class类是否也是所有自定义类/对象的超类?如果没有,在java反射中我们如何获得传递的任何类的类或者在任何对象上调用isInstance?

7 个答案:

答案 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运行时实例化的所有东西的超类。这包括:

  1. 您编写的类(自定义类)以及
  2. Java语言本身提供的类。
  3.   

    我认为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 extendsObject。{ / p>

答案 5 :(得分:1)

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

多重继承是指直接从两个不相关的类继承。例如,如果您有一个直接从PoliceDogCanine继承的班级PoliceOfficer,那么这将是多重继承。

答案 6 :(得分:0)

在这种情况下,它不是多重继承而是多层次 继承。
例如,让我们说你有一个班级说,Class Animal, 这个类将扩展Object类,默认情况下不扩展 其他课程。
我们也假设,你有一个扩展的类 Class Lion,Class Lion。在这种情况下,Class Lion不会 直接继承Object Class但由于它继承了Class 继承Object类的Animal,它也间接继承 它