class Activity {
public Activity() {
TestInherit t = (TestInherit)this;
t.setI();
}
}
class BaseActivity extends Activity {
public BaseActivity() {
super();
System.out.println(this);
}
public String toString() {
return "BaseActivity " + this.hashCode();
}
}
public class TestInherit extends BaseActivity {
public static int i = 3;
public TestInherit() {
super();
System.out.println(this);
}
public String toString() {
return "TestInherit " + this.hashCode();
}
public void setI() {
this.i = 100;
}
public static void main(String[] args) {
TestInherit t = new TestInherit();
System.out.println(t.i);
}
}
运行结果:
TestInherit 484984675
TestInherit 484984675
100
将变量 i 的static去掉
运行结果:
TestInherit 1436992360
TestInherit 1436992360
3
结论:在继承链中的所有类的 this 均代表一个对象,就是在main中要 new 的对象。变量 i 有 static 修饰时,在类的构造过程中,先初始化静态变量,
然后再开始整个构造过程,所以在Activity类中对静态变量的改变是可以保存下来的。 当变量 i 没有static 修饰时,先开始构造过程,之后再进行 i 的
初始化,所以在Activity类中对 i 的改变被覆盖了。
public Activity() {
TestInherit t = (TestInherit)this;
t.setI();
}
}
class BaseActivity extends Activity {
public BaseActivity() {
super();
System.out.println(this);
}
public String toString() {
return "BaseActivity " + this.hashCode();
}
}
public class TestInherit extends BaseActivity {
public static int i = 3;
public TestInherit() {
super();
System.out.println(this);
}
public String toString() {
return "TestInherit " + this.hashCode();
}
public void setI() {
this.i = 100;
}
public static void main(String[] args) {
TestInherit t = new TestInherit();
System.out.println(t.i);
}
}
运行结果:
TestInherit 484984675
TestInherit 484984675
100
将变量 i 的static去掉
运行结果:
TestInherit 1436992360
TestInherit 1436992360
3
结论:在继承链中的所有类的 this 均代表一个对象,就是在main中要 new 的对象。变量 i 有 static 修饰时,在类的构造过程中,先初始化静态变量,
然后再开始整个构造过程,所以在Activity类中对静态变量的改变是可以保存下来的。 当变量 i 没有static 修饰时,先开始构造过程,之后再进行 i 的
初始化,所以在Activity类中对 i 的改变被覆盖了。