public class Father { public Father(){
this.Test();
}
public void Test(){
System.out.println("this is Father");
}
}public class Child extends Father { public Child(){
super();
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
new Child();
}
public  void  Test(){
System.out.println("this is Child");
}}
我先重写了Test()方法 
new子类的对象···它优先初始化父类的构造器···这时候子类的构造器还没有初始化···但是为什么会调用的是调用子类的Test()方法

解决方案 »

  1.   

    重写了,由于new了一个child,所以调用的是child里的相应的test方法。
      

  2.   

    因为子类已经覆盖了负累的test
      

  3.   

    public class Child extends Father {    public Child(){
            super();
        }
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new Father();
        }
        public  void  Test(){
            System.out.println("this is Child");
        }}你改成我这样看看 
    多写下例子就知道了
      

  4.   

    Test()已经被重写,调用的就是子类,没必要深究!
      

  5.   

    关键是你要搞清楚的一点是 那个父类中的test()方法是哪个对象调用的,如果是父类对象调用的话就打印出“this is Father" ,但是如果是子类对象调用的话,就会打印出"this is Child",如果搞清楚了这点就不难了,你看,当你new Child()(这是个匿名对象)的时候,就这个动作,内存已经开空间了,对象已经建立了!!!!!(这个是关键);这个动作会触发一下动作(DEBUG):首先执行public Child(){super();},第二步:public Father(){this.Test();} 关键就是这步,这里的this是谁????? 答案不是我说的算,答案是:谁调用了这个Father构造 那么this就是谁,谁调用了他呢?哦,原来是 public Child(){ super();}这个构造调用了他,那又是谁调用了public Child()构造呢,哦,原来是 new Child()这个匿名对象调用了他 ,那层层递推得出结论 this 就是这个匿名对象 那this.test()就是 new Child().test(),这下一幕了然了吧,new Child是子类对象吧, test()方法是父类中的方法吧,而且子类重写了他, 也就是继承的特点了! 子类对象调用父类方法(此方法被子类重写),程序执行子类方法,所以打印"this is Child"。
      

  6.   

    new child()里写的是super();那么就调用了父类的构造函数this.test(),//这里的this指谁啊,不就是father吗!!!自然是那样了
      

  7.   

    表面上是父类的test()被子类覆盖了
    但在父类里的this到底是什么?
    难到在子类构造函数中调用父类的构造函数的时候会把自己传递给父类的构造函数吗?
    等待高人解答!!!
      

  8.   

    java3大特性,封装继承多态。用的是多态
      

  9.   

    new Child()这句就是生成了一个对象罗...而this就是指当前的对象罗,那么根据JAVA多态的特性,很自然就调用自己的方法了喔..就是Child类里的test()
      

  10.   

    多态,子类覆盖了父类的test()