首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java继承有关问题

2012-04-05 
java继承问题class Father{public void hitChild(){System.out.println(臭崽子,你站着,不打你我不是你爹!

java继承问题
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();
  }

}
最后打印的结果是:我跑,你打不着!
------------------------
为什么不是: 臭崽子,你站着,不打你我不是你爹!
  为什么打我?我做错什么了!
  我知道错了,别打了!
  我跑,你打不着!

[解决办法]
Son3 重写了 Son2 的 hitChild(), Son2 重写了 Son1的 hitChild(), Son1 重写了 Father的 hitChild();

Son3 s = new Son3();
s.hitChild();

s是Son3类的对像,当你会是在Son3类内先找hitChild()方法,如果找到了,就调用,不再往上找;如果找不到,就调用父类的hitChild()方法,一直往上找。
[解决办法]
如果把输出内容放到构造函数里,
则输出就是你要的,呵呵
[解决办法]
不知道楼主是不是想要看看继承的创建过程。当调用子类的构造器时就自动向上找到父类构造器,以此类推,因此把程序改成下面这样就可以得到你想要的结果了。

Java code
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();  }} 

热点排行