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