public class TestExtend extends Base {
       public static void main(String[] args) {
       Base b = new TestExtend();
       b.amethod();
      }
 
    @Override 
    public void amethod() {
     System.out.println("Driv..");
   }
 }
 
class Base {
    Base() {
      amethod();
 }
    public void amethod() {
      System.out.println("Base ");
    }
 }
 

解决方案 »

  1.   

    Driv..
    Driv..
    据我理解,因为TestExtend继承了父类Base,覆写了amethod()方法
    ,所以子类的构造函数super()方法也覆写了父类构造函数里的amethod()方法
    对象b是TestExtend类对象,在new的时候调用构造函数输出第一个Driv..
    第二Driv..是TestExtend类实例的amethod方法
      

  2.   

    new TestExtend();构造子类对象时,需要先构造父类对象,父类构造方法中调用了被子类重写过的amethod();方法,所以在创建父类对象时会直接调用子类覆写过的amethod();方法。
    b.amethod();直接调用子类覆写过的amethod();方法。多态的特性而已
      

  3.   

    public static void main(String[] args) {
    Base b = new TestExtend();
    //调用Base的构造方法,构造方法里面调用method()方法,但method()方法被子类重写,打印driv..
    b.amethod();
    //再次调用重写后的method(),打印driv...
    }