防止继承静态块

时间:2013-06-19 07:44:45

标签: java inheritance java-6

如果我们运行派生类,它会打印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) {

      }
}

基本上我在父类中有一些我想继承的方法,但是不希望在实例化派生类时发生在父静态块中发生的处理。 。有什么方法可以做到这一点,或者我将不得不复制代码?

2 个答案:

答案 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)

不可能。静态块在类加载期间执行,您无法在不重构父类以使用静态块的情况下阻止此操作