package com.me;
public class Books {
String name="super name";
static String age="super age";
public Books(){
System.out.println("super 构造方法");
System.out.println(this.name);
System.out.println(name);
System.out.println(age);
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^");
(1) this.show1();
}
public void show1(){
System.out.println("super common show1");
System.out.println(this.name);
System.out.println(name);
System.out.println(this.age);
System.out.println(age);
}
}
package com.me;
public class Book extends Books {
String name="sub name";
static String age="sub age";
(3) public Book(){
System.out.println("sub 构造方法");
System.out.println(this.name);
System.out.println(name);
System.out.println(age);
System.out.println("book构造方法内@@@@@@@@@@@");
(2) this.show1();
}
public void show1(){
System.out.println("sub common show1");
System.out.println(this.name);
System.out.println(name);
System.out.println(this.age);
System.out.println(age);
}
public static void main(String args[]){
System.out.println("bs构造方法:");
Books bs=new Book();
System.out.println("bs构造方法结束");
System.out.println();
System.out.println("b的构造方法");
Book b=new Book();
System.out.println("b的构造方法结束");
}
}
结果:
bs构造方法:
super 构造方法
super name
super name
super age
^^^^^^^^^^^^^^^^^^^^^^^
sub common show1
null
null
sub age
sub age
sub 构造方法
sub name
sub name
sub age
book构造方法内@@@@@@@@@@@
sub common show1
sub name
sub name
sub age
sub age
bs构造方法结束
b的构造方法
super 构造方法
super name
super name
super age
^^^^^^^^^^^^^^^^^^^^^^^
sub common show1
(4) null
(5) null
sub age
sub age
sub 构造方法
sub name
sub name
sub age
book构造方法内@@@@@@@@@@@
sub common show1
sub name
sub name
sub age
sub age
b的构造方法结束
总结:
Books bs=new Book();
当执行到父类的构造方法(1)处时调用子类的show1;
show1方法里name打印的是null,此时还未执行子类的
构造方法,子类中的成员变量name还未初始化因此
此时打印的是null,但类变量age可以正确打印sub age,
当执行完show1后再去初始化子类此时执行(2)时可正
确打印name,age
Book b=new Book();
和上面的分析差不多,但是我们现在要思考的是我们在同一个类
中先定义了一个bs(Books bs=new Book();)对象,初始化过程中
name变量应该已经初始化了,但是(4)(5)处打印的还是null,这是
为什么呢?我认为子类中的name是局部变量,当创建b的时候重新
进行还是先从父类再到子类,子类调用show1时子类还未初始化变量
name没有赋值,b的创建和bs的创建完全独立,每新建一个对象局部
变量都会重新初始化,重新分配内存空间因此为null