Why is super class constructor always called
我有以下两个班
1 2 3 4 5 6 7 8 9 10 11 |
然后跑步
一1 | classA c = new classB(); |
或
二1 | classB c = new classB(); |
总是给予
1 2 | A B |
为什么会这样?乍一看,在任何一种情况下,我都假定只调用
1 | B |
但这显然是错误的。
Java就是这样工作的。在调用子类的构造函数之前,通过
从文件中引用:
With
super() , the superclass no-argument constructor is called. Withsuper(parameter list) , the superclass constructor with a matching parameter list is called.Note: If a constructor does not explicitly invoke a superclass constructor, the Java compiler automatically inserts a call to the no-argument constructor of the superclass. If the super class does not have a no-argument constructor, you will get a compile-time error.
Object does have such a constructor, so ifObject is the only superclass, there is no problem.如果子类构造函数显式或隐式调用其超类的构造函数,您可能会认为将调用一整串构造函数,一直到EDOCX1的构造函数(0)。事实上,就是这样。它被称为构造函数链接,当类有很长的下降线时,您需要知道它。
< /块引用>在构造过程中总是调用超类构造函数,它保证在调用子类构造函数之前完成超类构造。如果不是所有面向对象的语言,大多数情况下都是如此。如果不想调用默认构造函数,可以使用参数显式调用超类构造函数;否则,编译器会自动执行此类调用。
两个语句在所构造的对象方面没有区别,所以您可以看到相同的输出。
在使用
new 构造相同的对象时,只在左侧使用不同的引用类型就不会对对象创建和构造函数链接产生任何影响。在创建对象之后,两个语句之间有什么不同。