package com.atguigu.test03;
/*
* 一个类初始化时会先检查它的父类是否初始化,如果父类没有初始化,那么会先初始化父类。因为一个类只要初始化一次。
*
* (1)父类的初始化<clinit>()
* ①父类的静态变量的显式赋值
* ②父类的静态代码块
* (2)子类的初始化<clinit>()
* ①父类的静态变量的显式赋值
* ②父类的静态代码块
*
* 特殊:
* 静态方法是不能被重写的
*/
public class TestClassInit {
public static void main(String[] args) {
/*Father f = new Father();
System.out.println("-------------------");
Son s = new Son();*/
Son s = new Son();
/*Father f = new Son();//多态引用
System.out.println("----------------");
f.assign();//静态方法在编译期间就确定了,不需要在运行时动态绑定
*/ }
}
class Father{
private static String info = assign();
static{
System.out.println("(1)父类的静态代码块");
}
public static String assign(){
System.out.println("(3)assign()方法");
return "Father";
}
}
class Son extends Father{
private static String info = assign();
static{
System.out.println("(2)子类的静态代码块");
}
public static String assign(){
System.out.println("(4)assign()方法");
return "Son";
}
}