学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
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
对于你不理解的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());
}
}
这样执行一下你应该就清楚了吧
AAAA
-1
0
BBBB
4
0
0
什么情况?
你插楼了 = = 我说的LS指2L。。不好意思 = =