super()
隐式放在每个构造函数中,以便它获取父类中提到的方法。层次结构中的最高级别为Object
。
问题是super()
类的Object
指向的地方?
答案 0 :(得分:8)
你可能会觉得这很有趣。
System.out.println("System.class.getSuperclass()= "+System.class.getSuperclass());
System.out.println("Object.class.getSuperclass()= "+Object.class.getSuperclass());
打印
System.class.getSuperclass()= class java.lang.Object
Object.class.getSuperclass()= null
答案 1 :(得分:2)
正如您所看到的,它没有基类(请注意,基类隐式为Object
但在这种情况下如何呢?)
如代码注释中所述,它是Java层次结构的根。因此,它是一种特殊情况,并且没有超类调用。
答案 2 :(得分:2)
Object类不能有super(),它是类层次结构中的最高项。它下面的所有东西都有一个super()但不是Object。
答案 3 :(得分:2)
请参阅JLS的12.5 Creation of New Class Instances
如果此构造函数用于
Object
以外的类,则此构造函数将以超类构造函数的显式或隐式调用开始(使用super
)。
答案 4 :(得分:1)
对象中没有超级。
答案 5 :(得分:1)
对象类位于java中所有类的基础中,因此在对象类的构造函数中不会调用super()。
它不会被任何类扩展,因此很明显它在构造函数中不会调用super。
答案 6 :(得分:0)
认为链条在对象处停止。
像A - > super() - > B-> super() - > 停止
答案 7 :(得分:0)
您可以通过编写两个类并从另一个类扩展一个类
来检查这一点例如:
将A类创建为:
class A{
int a, b;
A(int a, int b){
}
}
创建扩展A类的B类:
class B extends A{
public static void main(String a[]){
B b = new B();
}
}
当您尝试创建B类对象时会出现错误,因为B类默认构造函数被调用,哪个intrun调用超类“A”的默认构造函数,但A类没有任何默认值或零参数构造函数。