java 继承 及 初始化顺序
2014-06-25 17:07
309 查看
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 的改变被覆盖了。
相关文章推荐
- java继承 初始化顺序
- java类的初始化顺序及继承顺序
- Java继承关系中类的初始化顺序
- Java继承机制的初始化顺序+静态动态绑定
- JAVA第七节-继承,继承中方法重写,继承的初始化顺序,final关键字,super关键字,object类
- java中继承与初始化顺序 2
- java继承初始化顺序
- java继承中初始化的顺序
- Java继承时的初始化顺序
- java继承时初始化的执行顺序
- java对象中继承和变量初始化顺序浅析
- java继承中静态成员变量的初始化顺序
- Java关于继承的详细初始化顺序
- 【慕课笔记】U3 继承 第3节 JAVA中的继承初始化顺序
- 复习一下Java中继承关系的类的初始化顺序
- Java学习记录(一):Java中继承与静态static、非静态、构造方法等的初始化顺序
- 【转载】java继承 初始化顺序
- Java继承中父类与子类的初始化顺序
- Java中类继承的初始化顺序
- Java继承类的初始化顺序