Java 具有抽象类的静态块的行为
儿童班:Java 具有抽象类的静态块的行为,java,abstract-class,static-block,Java,Abstract Class,Static Block,儿童班: public class ChildExtending extends ParentAbstract{ public int childInt =111213; static{ System.out.println("child static block executed"); } public ChildExtending() { System.out.println("child const initialized
public class ChildExtending extends ParentAbstract{
public int childInt =111213;
static{
System.out.println("child static block executed");
}
public ChildExtending() {
System.out.println("child const initialized");
}
public void MethodInChild(){
System.out.println("MethodInChild called");
}
public static void main(String[] args){
System.out.println(ParentAbstract.parentInt);
System.out.println(ChildExtending.parentInt);
}
}
抽象类:
public abstract class ParentAbstract {
public static int parentInt=80713;
static{
System.out.println("parent static executed");
parentInt=9;
}
public ParentAbstract(){
System.out.println("parentAbstract initialized");
}
public void MethodInParent(){
System.out.println("MethodInParent called");
}
}
主要类别:
public class MainForCheck {
public static void main(String[] args){
/* ParentAbstract pa = new ParentAbstract(){
};*/
/* ChildExtending ce = new ChildExtending();
ce.childInt=5;*/
/*ChildExtending ce = new ChildExtending();
ce.childInt=5;
ce.MethodInChild();
System.out.println("pareny int is"+ce.parentInt);*/
ChildExtending ce = new ChildExtending();
ce.MethodInParent();
}
}
这给了我输出:
父静态执行
]
执行子静态块
父摘要已初始化
子常量已初始化
MethodInParent调用
为什么不是这样?
父静态执行
父摘要已初始化
执行子静态块
子常量已初始化
MethodInParent在类第一次加载时调用,它的静态块总是首先执行。因此,在这里执行其父级和子级的静态块,然后实例块或方法执行首先
childextensing
需要初始化(作为类型)。这将产生
parent static executed
child static block executed
根据
只有初始化类型后才能调用构造函数,此时您将获得以下输出:
parentAbstract initialized
child const initialized
MethodInParent called
一旦构建了对象,就可以对其调用实例方法,输出为:
parentAbstract initialized
child const initialized
MethodInParent called
我认为您缺少的一点是,必须在构造函数启动之前完全初始化类型。构造函数调用无法初始化足够的超类来调用其构造函数,然后初始化子类。除此之外,如果在超类构造函数中调用getClass()
,则必须是一个完全初始化的类,它必须是子类,因为对象就是子类的实例