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