有这样一个代码:抽象类 abclassA:
存在方法f更新(),
然后接收方法的返回值,做异常处理。子类classb:
继承上面的父类,
override [f更新()]方法,在这个方法中做实际的更新处理操作。看到这后有个疑问,java在执行这种继承关系时,代码是按照怎样一个顺序执行的?实际应用当中,肯定是生成子类的实例,然后掉子类的[f更新()]方法,并传入相关参数。
那么,代码是先把父类这层执行完然后再一层一层的执行子类?
还是执行到父类的[f更新()]时,再一层一层的往下执行子类代码,直到最后那个子类后,然后再一层一层返回上一级,执行未执行完的代码?

解决方案 »

  1.   

    LZ没弄清楚多态
    如果是调用子类的f方法,除非该子类的f方法了显式地调用父类的f,即super.f,否则是不会执行父类的f的,这就是所谓的方法重写,即子类改写了父类(可以完全跟父类毫无关系)
      

  2.   

    子类重写父类的方法,看你程序调用的是那个对象实例。如果调用父类对象实例的方法,那么就直接调用父类的方法。如果调用的是子类对象实例的方法那么就是子类重写后的方法。
    有时候是:
    父类 A = new 子类();这是父类变量指向子类的实例,这样调用的方法就是子类重写后的方法。
    如果是:
    父类 A = new 父类();这是直接用的父类对象的实例,那么调用的是父类的方法。lz所说一层层往上调用的是子类中的构造函数。在子类构造函数执行的时候是先执行父类的构造器。
      

  3.   

    如果子类override [f更新()]方法中有super.f更新()那么先父后子,如果没写,只执行子不执行父
      

  4.   

    继承在 java 里面只有一个对象实例,它是子类型的,不管内部怎么实现的,作为程序总是只能看到一个对象,看不到有什么隐含的指向父对象的任何东西。而且  java 里面非静态的方法都是虚函数调用。