Calling an overridden method from a constructor

后端 未结 4 1184
醉话见心
醉话见心 2021-02-15 09:55

In the following example:

class Base {    
    int  x=10;  

    Base() {    
      show();
    }  

    void show() {   
        System.out.print (\"Base Show \         


        
4条回答
  •  粉色の甜心
    2021-02-15 09:58

    I think what is happening here is that the super constructor is calling the child's show() method because this method was overriden in Child.

    That is correct

    but why is the value of x 0

    because it's not initialized yet (x of Child)

    and why is it able to access this method before the super constructor has completed?

    That's exactly why in a constructor you should never call a method, which can be overridden (non-final public and protected).

    Edit:

    The strange thing here is that everything has default/ package-private visibility. This can have some strange effects. See: http://www.cooljeff.co.uk/2009/05/03/the-subtleties-of-overriding-package-private-methods/

    I recommend to avoid overriding methods with default visibility if possible (you can prevent this by declaring them final).

提交回复
热议问题