学java不久,写了下面的代码,不是很懂,是有关继承的,请各位高手帮忙
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

解决方案 »

  1.   

    结果真的是这样吗?我感觉不大对头。我只知道: B类中重写了父类的方法(getX())过后,如果写的是B.getX(), 那么是执行B类中重写后的方法,而不会执行它父类(A类)中的方法
      

  2.   

    子类执行构造方法的时候首先执行父类的空的构造方法,输出AAA -1都没有问题
    对于你不理解的0为什么不是-1,这个你可以执行一下下面我做过标记的代码,这里实际上调用的是子类的同名方法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());
        }
    }
    这里我也头一次意识到这个问题,应该是编译器编译执行的时候的“自动向下绑定机制”做的“坏事”,同时也提醒你这样写代码是很容易出bug的,如果你的B类没有重写A类的getX()方法整个代码执行都很符合预期,你看看下面的代码再
    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 getXX(){
            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());
        }
    }
    这样执行一下你应该就清楚了吧
      

  3.   

    我的执行结果是这样的
    AAAA
    -1
    0
    BBBB
    4
    0
    0
    什么情况?
      

  4.   


    你插楼了 = =  我说的LS指2L。。不好意思 = =