Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Inheritance - Fatal编程技术网

默认情况下,任何类都扩展对象类。不';这不是说java支持多重继承吗?

默认情况下,任何类都扩展对象类。不';这不是说java支持多重继承吗?,java,oop,inheritance,Java,Oop,Inheritance,大家都知道,在java中,我们只能扩展“一个”类 但为了理解: 任何Java类都隐式扩展Java.lang.Object 如果A类扩展了B类,那么A类不是隐式地扩展B类和java.lang.Object吗 在这种情况下,我们默认扩展两个类 如果Java不支持多重继承,为什么允许这样做?不,Java阻止一个类直接扩展多个超类。类A可以扩展扩展类C的类B。这仍然是单一继承。所有类都形成一个树,其中根是对象类,每个类(对象除外)正好有一个直接超类(或父类),即对象或其他类。这将是一个多级继承。 您将多

大家都知道,在java中,我们只能扩展“一个”类

但为了理解:

  • 任何Java类都隐式扩展Java.lang.Object
  • 如果A类扩展了B类,那么A类不是隐式地扩展B类和java.lang.Object吗
  • 在这种情况下,我们默认扩展两个类


    如果Java不支持多重继承,为什么允许这样做?

    不,Java阻止一个类直接扩展多个超类。类A可以扩展扩展类C的类B。这仍然是单一继承。所有类都形成一个树,其中根是对象类,每个类(对象除外)正好有一个直接超类(或父类),即对象或其他类。

    这将是一个多级继承。 您将多个错误地理解为多个

    A->B->C //This is multilevel inheritance which you are talking about
    
    多重继承类似于(这在java中是不可能的)

    Java不支持使任何模棱两可的情况消失的多重继承。但是仔细地实现implement关键字来实现确实会给人多重继承的感觉

    结论:


    类A可以扩展扩展类C的类B。这仍然是单一继承。所有类都形成一个树,其中根是对象类,每个类(对象除外)正好有一个直接的超类(或父类)

    每当类a扩展类B时,类a不再扩展Java.lang.Object,但是:因为每个类都扩展了Java.lang.Object,正如您前面所说,然后类B将扩展Java.lang.Object,因此类A仍然是该特定类的子类。

    默认情况下隐式扩展对象”意味着如果在类声明中看不到extends关键字,它将“不可见但直接”扩展对象。如果看到extends关键字,则该类不会直接扩展对象,而是扩展extends子句中提到的类。现在,您必须遍历该层次结构,在某一点上,您将发现一个没有“扩展”的父类,并且隐式继承再次出现


    层次结构中的所有类都可以传递地扩展对象,但只有根类可以直接扩展对象。传递性,因为所有子类都继承其父类的所有特性,包括其父类和实现的接口。

    如果无法直接扩展,有没有一种方法可以编写一个可以像java.lang.Object那样间接扩展的类,并使代码能够像任何java类扩展java.lang一样扩展我们想要的任意多个类。Object@Kathir每个类可以有许多直接子类,但只有一个直接超类。因此,如果A扩展了B,而B扩展了C,那么A有一个直接超类(B)和两个直接超类(也称为祖先)-C和Object.class a默认扩展java.lang.Object-class b默认扩展java.lang.Object…现在当我们说class a扩展class b时-冲突在java中是如何处理的,或者它在内部是如何工作的?@Kathir如果您不指定哪个class a扩展的,默认情况下它会直接扩展Object。然而,若A扩展了其他类,A不会直接扩展对象。假设我们创建了两个类。a类和b类。根据java规范,默认情况下,任何类都扩展java.lang.Object。这意味着类a隐式扩展了java.lang.Object,类b隐式扩展了java.lang.Object。所以,当我们说类a扩展类b时,我们不是说类a扩展了两个类吗???\n这意味着类a也扩展了b以及java.lang.Object。是的,但仍然不是你所想的那样。因为为了实现这一点,类B必须扩展Java.lang.Object,如果类B确实扩展了Java.lang.Object,那么类A实际上是这两个类的子类。你误解了“多重继承”的含义。多重继承是指一个类直接扩展多个类。这可能会导致像钻石问题这样的问题,而钻石问题不能在单一继承中发生。
         A
       |   |
       B   C