class Father{
    public void hitChild(){
        System.out.println("臭崽子,你站着,不打你我不是你爹!");
    }
}
class Son1 extends Father{
    public void hitChild(){
        System.out.println("为什么打我?我做错了什么!");
    }
}
class Son2 extends Son1{
    public void hitChild(){
        System.out.println("我知道错了,别打了!");
    }
}
class Son3 extends Son2{
    public void hitChild(){
        System.out.println("我跑,你打不着!");
    }
}
public class Interface_1 {
    public static void main(String args[]){
        
        Son3 s = new Son3();
        s.hitChild();
        }}
最后打印的结果是:我跑,你打不着!
------------------------------------------------------------
为什么不是:      臭崽子,你站着,不打你我不是你爹!
                  为什么打我?我做错什么了!
                  我知道错了,别打了!
                  我跑,你打不着!

解决方案 »

  1.   

    Son3 重写了 Son2 的 hitChild(), Son2 重写了 Son1的 hitChild(), Son1 重写了 Father的 hitChild();Son3 s = new Son3();
    s.hitChild();s是Son3类的对像,当你会是在Son3类内先找hitChild()方法,如果找到了,就调用,不再往上找;如果找不到,就调用父类的hitChild()方法,一直往上找。
      

  2.   

    不知道楼主是不是想要看看继承的创建过程。当调用子类的构造器时就自动向上找到父类构造器,以此类推,因此把程序改成下面这样就可以得到你想要的结果了。class Father{
    Father(){
      System.out.println("臭崽子,你站着,不打你我不是你爹!");
      }
    }
    class Son1 extends Father{
    Son1(){
      System.out.println("为什么打我?我做错了什么!");
      }
    }
    class Son2 extends Son1{
    Son2(){
      System.out.println("我知道错了,别打了!");
      }
    }
    class Son3 extends Son2{
    Son3(){
      System.out.println("我跑,你打不着!");
      }
    }
    public class Interface_1 {
      public static void main(String args[]){
        
      Son3 s = new Son3();  }}