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

Java继承中的问题,请高手帮助
学java不久,写了下面的代码,不是很懂,是有关继承的,请各位高手帮忙

Java code

class A{
    public static int x = -1;
    A(){
        System.out.println("AAA");
        System.out.println(x);
        System.out.println(getX());
    }
    public int getX(){
        return x;
    }
}
class B extends A{
    B(int x){
        System.out.println("BBB");
        x = x + 4;
                System.out.println(x);
        System.out.println(getX());
    }
    public int getX(){
        return x + 1;
    }
}
public class ReTest{
    public static void main(String args[]){
        B b = new B(0);
        System.out.println(b.getX());
    }
}



结果:AAA
  -1
  0 <------------------这里开始
  4
  BBB
  -1
  0
  0

------解决方案--------------------
子类执行构造方法的时候首先执行父类的空的构造方法,输出AAA -1都没有问题
对于你不理解的0为什么不是-1,这个你可以执行一下下面我做过标记的代码,这里实际上调用的是子类的同名方法
Java code

class A{
    public static int x = -1;
    public A(){
        System.out.println("AAA");
        System.out.println(x);
        System.out.println(this.getX());
    }
    public int getX(){
        System.out.println("super class x:"+x);
        return x;
    }
}
class B extends A{
    public B(int x){
        System.out.println("BBB");
        x = x + 4;
        System.out.println(x);
        System.out.println(getX());
    }
    public int getX(){
        System.out.println("extend class x:"+x);
        return x + 1;
    }
}
public class ReTest{
    public static void main(String args[]){
        B b = new B(0);
        System.out.println(b.getX());
    }
}