面向对象(oop)子类继承父类,用构造器调用子类成员方法,理解对象初始化顺序
问题:成员变量的赋值是否在构造方法之前?
package cn.cxl.test;
/**
* 面向对象(oop)子类继承父类,用构造器调用子类成员方法,
* 理解对象初始化顺序
* @author 平秋月初
*
*/
public class TestClass {//基类
String name="TestClass";
public TestClass(){//调用a方法,输出成员属性
a();
}
public void a(){
System.out.println("testClass:"+name);
}
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.name);
}
}
class Dog extends TestClass{
String name="Dog";
public void a(){
// name="Dog";
super.a();//调用父类方法
System.out.println("dog:"+name+" ");
}
}
输出结果:
进一步分析:
在mian方法中初始化Dog对象,执行构造方法,先调用父类构造方法,a方法之前有隐含this,指向当前对象。所以调用的是子类的a方法
从结果可以看出,父类方法输出了成员变量,子类是在初始化方法结束后才输出成员变量,所以成员变量的赋值是在构造方法执行之后
反编译Dog类:
class Dog extends TestClass {
String name;
Dog() {
name = "Dog";
}
public void a() {
super.a();
System.out.println((new StringBuilder()).append("dog:").append(name).append(" ").toString());
}
}
更加清晰的了解成员变量赋值的过程!!