Polymorphic method in Constructor (Java)

前端 未结 4 2068
温柔的废话
温柔的废话 2021-02-08 09:46

Class A calls the public method f() in the Constructor. Class B overrides method f() with its own implementation.

Suppose you inta

4条回答
  •  星月不相逢
    2021-02-08 10:08

    Whenever you create an instance of the subclass, the super classes constructor is invoked first (implicit super()). So it prints

    a: constructor
    

    f() is invoked next and since subclass overrides the superclass method, the subclass f() is invoked. So you will see

    B: f()
    

    Now, the subclass is not initialized yet (still super() is executing) so x default's to the value 0 because that is the default value for type int. Because you incremented it (this.x++;) it becomes 1

    B: x = 1
    

    Now, the superclass constructor is complete and resumes at the subclasses constructor and hence

    B: constructor
    

    The instance variables are now set to the values you have specified (against the default values that correspondt to the type (0 for numerics, false for boolean and null for references))

    NOTE: If you now print the value of x on the newly created object, it will be 10

    Since this is a bad practice, the static code analysis tools (PMD, FIndBugs etc) warn you if you try to do this.

提交回复
热议问题