If you uncomment that line (//0) there is no implementation of the method in class Bang. So BigBang would have to implement it. But BigBang does not, so BigBang has to be declared abstract. But then we have a contradiction: BigBang is final and cannot be declared abstract! The final prevents BigBang being extended and method f from being provided with an implementation.