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}