class child
{
child()
{
super();
System.out.println("Hello");
}
public static void main(String arg[])
{
child obj=new child();
}
}
在此代码中,当我创建类child的对象时,将调用子构造函数。但是为什么不给出错误,因为没有父类。 super()在这做什么? 谁的构造函数是super()关键字调用?
答案 0 :(得分:4)
在Java中,每个对象都隐式扩展Object
。在这里调用super将只调用Object的构造函数。另外请注意,您应该遵守命名约定,例如大写类名。
答案 1 :(得分:3)
它正在调用Object class
的构造函数,因为java中的所有对象都默认扩展为Object类。
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