在Object类中是否还有一个super(),如果是这样,它在哪里?

时间:2012-01-10 11:58:17

标签: java core

super()隐式放在每个构造函数中,以便它获取父类中提到的方法。层次结构中的最高级别为Object

问题是super()类的Object指向的地方?

8 个答案:

答案 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)

查看source code for Object

是有益的

正如您所看到的,它没有基类(请注意,基类隐式为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类没有任何默认值或零参数构造函数。