如果我们运行派生类,它会打印derived和parent ..有什么方法可以阻止静态块的继承?
// 1班
public class parent {
static {
System.out.println("Parent");
}
}
// Class2中
public class derived extends parent{
static {
System.out.println("derived");
}
public static void main(String [] args) {
}
}
基本上我在父类中有一些我想继承的方法,但是不希望在实例化派生类时发生在父静态块中发生的处理。 。有什么方法可以做到这一点,或者我将不得不复制代码?
答案 0 :(得分:10)
NO。你做不到。 静态初始化块不是继承的。静态块是在加载类时执行的,因为基类扩展了超类,甚至超级类定义也会在引用您的类时由JVM加载。
根据JLS 12.4.1:
初始化发生时类或接口类型T将在第一次出现以下任何一个之前立即初始化:
•T是一个类,并创建了一个T实例。
•T是一个类,调用T声明的静态方法。
•分配由T声明的静态字段。
•使用T声明的静态字段,该字段不是常量变量(§4.12.4)。
•T是顶级类(第7.6节),并且执行在词典中嵌套在T(第8.1.3节)内的断言语句(第14.10节)。
答案 1 :(得分:1)
不可能。静态块在类加载期间执行,您无法在不重构父类以使用静态块的情况下阻止此操作