Search code examples
javainheritancejava-6

prevent inheritance of static block


If we run derived class,it will print derived and parent..is there any way to prevent inheritance of static block ?

//Class 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) {

      }
}

Basically I have some method in parent class which I want to inherit but dont want the processing which is happening in parent static block to happen when derived class is being instantiated. .Is there any way to do this or I will have to duplicate the code ?


Solution

  • NO. You cannot do that . Static initialzier blocks are not inherited . Static blocks are executed when class is loaded since your base class extends a super class , even the super class definition will be loaded by JVM when referring to your class.

    As per the JLS 12.4.1:

    When Initialization Occurs A class or interface type T will be initialized immediately before the first occurrence of any one of the following:

    • T is a class and an instance of T is created.

    • T is a class and a static method declared by T is invoked.

    • A static field declared by T is assigned.

    • A static field declared by T is used and the field is not a constant variable (§4.12.4).

    • T is a top level class (§7.6), and an assert statement (§14.10) lexically nested within T (§8.1.3) is executed.