Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java和超类中的继承(对象、类)_Java_Class_Object_Multiple Inheritance - Fatal编程技术网

java和超类中的继承(对象、类)

java和超类中的继承(对象、类),java,class,object,multiple-inheritance,Java,Class,Object,Multiple Inheritance,java.lang.Object是隐式继承的所有自定义类/对象的超类吗?我认为java不支持多重继承。我问这个问题的原因是,如果我已经从自定义类中的另一个类继承,并且java再次强制执行java.lang.Object的隐式继承,那么它不是多重继承吗 另外,java.lang.class类也是所有自定义类/对象的超类吗?如果不是,在java反射中,我们如何获得传递的任何类的类类型或对任何对象调用isInstance?多重继承意味着一个类有多个直接的前身。如果A从B继承,B从C继承,这不是多重继承

java.lang.Object
是隐式继承的所有自定义类/对象的超类吗?我认为java不支持多重继承。我问这个问题的原因是,如果我已经从自定义类中的另一个类继承,并且java再次强制执行
java.lang.Object
的隐式继承,那么它不是多重继承吗


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

多重继承意味着一个类有多个直接的前身。如果A从B继承,B从C继承,这不是多重继承


我不明白第二个问题(“java.lang.class”);您可能需要重新表述以澄清这一点。

对象
是其他所有类的超类。当您的
子类
继承自您的
父类
时,它不是
对象
的子类,但它仍然是后代,因为它的父类是
对象
的后代。 所以,如果不指定超类/父类,它将自动成为对象。如果您确实指定了父类,那么
对象
仍然是一个超类,因为根据定义它是父类的超类


不是每个类的超类,但是
对象
类指定了通过
getClass
方法获取每个类的
类的方法。

一切都是一个对象,也就是说,您可以看到如下结构:

Object

Animal

Cat
而不是像这样:

Object    Animal

      Cat

如果
Cat
同时扩展了这两种语言,则与最后一个示例不同,但是
Cat
扩展了
Animal
,而
扩展了
对象

没有显式超类的每个类都从
java.lang.Object
继承,而其他所有类都从它间接继承,因为当您进入继承树时,您最终将在没有显式超类的类处结束,然后在
对象处结束


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

从自身继承的自定义类直接或隐式地从
对象继承,因此间接地从对象继承。这个链条是
YourObject->MiddleObject->java.lang.Object
。不需要多重继承

多重继承是指直接从两个不相关的类继承。例如,如果您有一个类
policydog
,该类直接从
犬科
警察
继承,则这将是多重继承

是所有的java.lang.Object超类 继承的自定义类/对象 含蓄地

轻微更正:关于以下表达式:

所有
自定义的超类
类/对象

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

现在,请回答您关于
java.lang.Object
的问题。它是java运行时可以实例化的所有事物的超类。这包括:

  • 您编写的类(自定义类),以及
  • Java语言本身提供的类
  • 我认为java不支持多个 继承权

    没有。它只支持单个
    (或
    实现
    )继承(与多个
    接口
    (或
    类型
    )继承结合使用)

    您混淆了继承和类层次结构。请参阅下文

    我问的原因是我是否已经 从我的系统中的另一个类继承 自定义类,java再次强制 隐性遗传 java.lang.Object位于其上方

    多重继承也没问题。假设您有一个从Java已经提供的类(比如a类)继承而来的类B。因此有一个线性的传递关系,如下所示:

    java.lang.Object > A > B
    
    其中,
    表示
    的直接父级
    。从对象继承的任何类只能有一个且只有一个
    直接父级
    。在任何情况下,对于任何两个类a和B,以下约束都不适用于C类:

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

    也就是说,对于所有类别A和B,A是B的
    直接父项
    ,那么对于所有类别C,C只能是B*的
    直接父项
    ,当且仅当C本身是A

    对于单继承,只要链中的每个类前面都有一个且只有一个直接父类,那么(理论上)就可以有一个无限继承链。
    A>B>C>。
    。作为一个有用的类比,这类似于自然数中的
    前置关系(
    0先于1先于2先于3…

    免责声明:这不是您在日常编程活动中使用的东西。但是,准确了解这些东西的含义将极大地帮助您完成面向对象

    这不是多重继承吗

    否(见上文)。与上面解释的单一继承相反,在多重继承中,您可以有多个直接父代(如C++中所示)

    正如我们在上面的定义中注意到的,可传递的继承关系'>'是从一个类到另一个类的
     {A} > B -> forAll a {a in A <-> a > B}