public class Test1 {
public static void main(String[] args) {
new B();
System.out.println("------------");
new B();
B b=new B();
System.out.println(b.v5);
}
} class A{
int v1=1;
int v5=5;
static int v2=2;
static{
System.out.println("A的静态块");
}
public A(){
System.out.println("A的构造方法");
}
} class B extends A{
int v3=3;
//int v5=6;
static int v4=4;
static{
System.out.println("B的静态块");
}
public B(){
System.out.println("B的构造方法");
}
}
此类主要用来研究java对象的创建过程
打印结果为
A的静态块
B的静态块
A的构造方法
B的构造方法
------------
A的构造方法
B的构造方法
A的构造方法
B的构造方法
5
对象创建时,会优先访问当前类的父对象,然后将父类中的静态常量,静态代码块进行初始化,
然后初始化当前类的静态常量以及静态代码块, 而后会执行父类的构造方法,然后在执行本类的构造方法
如果子类的对象在调用某个属性时,会先访问子类,如果有则进行赋值,如果没有,则会去父类中进行寻找,再进行赋值.
如果父类和子类都有该属性,则优先使用当前类的属性.