Java 对象类如何成为子类的超类?
事实1: Java不支持多重继承 事实2: 对象是所有其他类的超类 如果我有一个类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
父类
和一个继承该类父类的类子类
:
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规定其简短且正式:
子类关系是直接类的传递闭包
子类关系
因此classObject
是所有类的超类
但文件还说:
除了没有超类的对象
,每个类都有并且只有一个直接超类(单个)
继承)
继续这个例子,类ColoredPoint扩展了点{int color;}
“是类点
的一个直接子类”。通过传递关系,它是classObject
的(非直接)子类
总结:
对象
要么是直接超类,要么通过传递关系是任何其他类的最后一个超类
回答问题:
- 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);