读书人

java继承有关问题

发布时间: 2012-04-05 12:42:40 作者: rapoo

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

读书人网 >J2SE开发

热点推荐