如果我们运行派生类,它将打印派生类和父类。有什么方法可以防止静态块的继承吗?
//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) {
}
}
基本上,我在父类中有一些方法,我想继承这些方法,但不希望在实例化派生类时发生在父静态块中发生的处理。 .有什么办法可以做到这一点,否则我将不得不复制代码?
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 节)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)