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_Multiple Inheritance - Fatal编程技术网

Java 对象类如何成为子类的超类?

Java 对象类如何成为子类的超类?,java,oop,inheritance,multiple-inheritance,Java,Oop,Inheritance,Multiple Inheritance,事实1: Java不支持多重继承 事实2: 对象是所有其他类的超类 如果我有一个类父类和一个继承该类父类的类子类: class Parent { } class Child extends Parent { } 在这种情况下,如果Java不支持多重继承,类子类将如何继承对象类 如何定义这三者之间的关系 选项1: 选项2: 选项2,因为每个对象都派生object.class方法它是选项2。如果定义一个超类,它将是类的直接超类。如果不定义一个超类,Object将是直接的超类 class P

事实1:

Java不支持多重继承

事实2:

对象是所有其他类的超类

如果我有一个类
父类
和一个继承该类
父类的类
子类

class Parent {

}

class Child extends Parent {

}
在这种情况下,如果Java不支持多重继承,类
子类
将如何继承
对象

如何定义这三者之间的关系

选项1:

选项2:


选项2,因为每个对象都派生object.class方法

它是选项2。如果定义一个超类,它将是类的直接超类。如果不定义一个超类,
Object
将是直接的超类

class Parent {

}

class Child extends Parent {

}
相当于

class Parent extends Object {

}

class Child extends Parent {

}

因此,虽然
Object
是所有类的超类,但在进入
Object
之前,类层次结构中可能有一些步骤。它不是所有类的直接超类。

选项2。对象是所有其他类的超类,但对象可能不是类的直接超类。

对象可能不是直接父类,但它始终是超级父类

Child extends Parent
Parent extends Object

 |
 V

Child [indirectly] extends Object

正确的答案是选择2。任何Java类都继承其父类的所有父类。换句话说

A类扩展B类 B类扩展C类 C类扩展了D类

类X扩展了A->这意味着A继承了B、C和D的所有受保护/包/公共字段


在您的示例中,类Child继承父属性,但也继承传递模式中的对象属性。

这是一个有趣的讨论。我认为这将是第二个选择。就像你尝试下面的代码一样

public static void main(String []args){
      Parent p=new Parent();
      Class c= p.getClass();

      Child child =new Child();
      Class c1= child.getClass();
      System.out.println(c.getSuperclass());
      System.out.println(c1.getSuperclass());

 }
您将获得以下输出:

class java.lang.Object 
class Parent
报告说:

对象
是类层次结构的根

如果一个类没有通过使用关键字
extends
对其进行贴花来扩展任何其他类,那么它将通过隐式方式从
对象
进行扩展

报告说:

在没有任何其他显式超类的情况下,每个类都是 隐式地是Object的子类

请参阅中的“直接超类和子类”

它表明
类点{intx,y;}
“是Object的一个直接子类”

此外,文件说:

类可以从从以下类派生的类派生: 派生自类等,并最终派生自 最顶层的类,
对象
。这样一个阶级据说是所有人的后裔 继承链中的类可以追溯到
对象

JLS规定其简短且正式:

子类关系是直接类的传递闭包 子类关系


因此class
Object
是所有类的超类

但文件还说:

除了没有超类的
对象
,每个类都有并且只有一个直接超类(单个) 继承)

继续这个例子,
类ColoredPoint扩展了点{int color;}
“是类
的一个直接子类”。通过传递关系,它是class
Object
的(非直接)子类

总结:
对象
要么是直接超类,要么通过传递关系是任何其他类的最后一个超类

回答问题:

  • Java不支持多重继承:它以可传递的方式提供单一继承。每个类只直接扩展一个超类
  • 关系如何:类
    父类
    对应于JLS示例的类
    ,类
    子类
    对应于类
    彩色点
    。只有选项2显示了这种关系
来自

公共类对象

类对象是类层次结构的根。
每个类都将对象作为一个超类。
所有对象,包括数组,都实现该类的方法


这意味着每个Java类都有
对象作为层次结构中的根,而不一定是它的直接父对象。

没有多重继承意味着在Java中一个类只扩展一个类;有一个直接基类。间接地,一个类可以有许多祖先:子类的父类和对象作为祖先“超级”类

<> P>避免C++中多重继承的原因是:歧义涉及:

假定多重继承的伪代码:


首先,使用Java8,可以实现

其次,您对对象类的理解在“选项2”中得到了正确表达
然而,它不是多重继承,而是多层次继承。”选项1'是多重继承。


请检查此项以了解更多信息。

对象
是Java中每个类的超类。@Arvind
多级继承
多重继承
不是一回事。java支持多层次继承< /C>,但是C++没有。请不要在问题中发布答案/解决方案,但是请自由地写一个新的答案,并标记为接受,如果你认为这是你问题的真正解决方案。参见@AbhishekKeshri是的,你可以-只需使用下面的答案框。“自我回答”所做的只是在问题字段上显示一个答案框。但是你需要发布一个答案吗?似乎已经有了一个非常好的答案,您已经接受了。@AntP我将删除解决方案部分。你的论点很有道理。
将子类
也继承
对象
?是不是
类子级扩展父级,对象
(如果内部可能!!!)?@AbhishekKeshri否。子级通过父级继承对象。@AbhishekKeshri
Object --> Parent --> Child
                  --> OtherChild

Relation: 1 --> N
class A : Comparable
class B : Comparable

class Child : A, B {

    @Override A? B?
    int compareTo(Child rhs) { ... super.compareTo ? ... }
}

A a = new Child();
B b = new Child();
a.compareTo(b);