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