超级构造函数调用

Dan*_*ane 1 java constructor subclass superclass

在Java中,如果我的类扩展超类和默认构造函数的第一线Super(),是超类的字段初始化,或者仅仅是构造函数运行?

此外,如果超类中的构造函数调用恰好在两个类中的方法,它是否运行超类或子类版本?

Jon*_*eet 9

在Java中,如果我的类扩展了一个超类,并且默认情况下构造函数的第一行是Super(),那么超类的字段是否已初始化?或者只是构造函数运行?

在运行超类构造函数体之前,始终初始化超类的字段.

有关详细信息,请参阅JLS的第15.9.4节第12.5节.

此外,如果超类中的构造函数调用恰好在两个类中的方法,它是否运行超类或子类版本?

假设子类方法实际上覆盖了超类1,则将调用子类实现.这通常被视为坏事,因为它意味着该方法不能依赖于子类构造函数初始化的任何东西.