日期:2014-05-20  浏览次数:20716 次

不解,为什么这个结果i
Java code


public class work2 {
    public static void main(String[] args){
        father A=new father();
        son C=new son();
        System.out.println("A="+C.f());
    }
}
class father{
    int i=1;
    public int f(){
        if(i==4)
            return 0;
        System.out.println(i+++"father");
        return f();
    }
}
class son extends father{
    static int j=1;
    public int f(){
        System.out.println(j+++"son="+super.f());
        return 0;
    }
}




------解决方案--------------------
我估计你对 return f(); 这个没有看清。

这个返回时,并不是调用father的函数,不是自己调自己,而是运行的是son的的f().

因为C就是son, 只要重名的,被override的都是调用子类的。


------解决方案--------------------
Java code

public class work2 {
    public static void main(String[] args){
       // father A=new father();  delete
        son C=new son();
        System.out.println("A="+C.f());
    }
}
class father{
    int i=1;
    public int f(){
        if(i==4)
            return 0;
        System.out.println(i+++"father");
        return f();//这里做递归调用  f()调用的 是son里面的 f() 
    }
}
class son extends father{
    static int j=1;
    public int f(){
        System.out.println(j+++"son="+super.f());
        return 0;
    }
}