当没有定义父类时,super()方法不给出错误

时间:2014-06-25 03:16:52

标签: java super

class child
{
    child()
    {
        super();
        System.out.println("Hello");
    }
    public static void main(String arg[])
    {
        child obj=new child();
    }
}

在此代码中,当我创建类child的对象时,将调用子构造函数。但是为什么不给出错误,因为没有父类。 super()在这做什么? 谁的构造函数是super()关键字调用?

5 个答案:

答案 0 :(得分:4)

在Java中,每个对象都隐式扩展Object。在这里调用super将只调用Object的构造函数。另外请注意,您应该遵守命名约定,例如大写类名。

答案 1 :(得分:3)

它正在调用Object class的构造函数,因为java中的所有对象都默认扩展为Object类。

来自documentation

Class Object is the root of the class hierarchy. Every class has Object as a superclass. 
All objects, including arrays, implement the methods of this class.

答案 2 :(得分:3)

您正在调用Object方法,最终所有其他类都会从该方法中下载。

首先,澄清这种情况下的类层次结构,Java教程中的the inheritance section说明:

  

除了Object,它没有超类,每个类都有一个且只有一个直接超类(单继承)。 在没有任何其他显式超类的情况下,每个类都隐式地是Object的子类。

然后,对于tutorial stuff on using super

  

注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对超类的无参数构造函数的调用。

     

如果超类没有无参数构造函数,则会出现编译时错误。 对象确实有这样的构造函数,因此如果Object是唯一的超类,则没有问题。

答案 3 :(得分:1)

Object中的java.lang package类位于类层次结构树的顶部。每个类都是Object类的直接或间接的后代。

所有对象(包括数组)都实现此类的方法。这就是为什么你的super()实际上是在调用Object类的构造函数。

答案 4 :(得分:1)

我们用Java创建的每个类都是" Object"的隐含后代。对象(换句话说,Object的子类)。因此,当您调用super()时,它会隐式调用Object类的构造函数。拥有此功能的基本原因是概括了以下常见功能:

    synchnronizaton - like wati()
    object identity - like hashcode(), equals()

还有更多。

谢谢, JK