Table of Contents

About

Final is modifier prohibiting value modification.

Type

Class

Declaring an entire class final prevents the class from being subclassed.

This is particularly useful, for example, when creating an immutable class like the String class.

An interface cannot be final

Method

You use the final modifier in a method declaration to indicate that the method cannot be overridden by subclasses.

You might wish to make a method final if it has an implementation that should not be changed and it is critical to the consistent state of the object.

Example of using a final method for initializing an instance variable:

class Whatever {
    private varType myVar = initializeInstanceVariable();
	
    protected final varType initializeInstanceVariable() {

        //initialization code goes here
    }
}

This is especially useful if subclasses might want to reuse the initialization method. The method is final because calling non-final methods during instance initialization can cause problems.

Methods called from constructors should generally be declared final. If a constructor calls a non-final method, a subclass may redefine that method with surprising or undesirable results.

Member

The modifier final indicate that the value of a member will never change

The final modifier indicates that the value of a field cannot change.

The reference to final variable is thread safe since it can never be changed.

A final member can be initialized through:

  • an Initializer expression
final int myFinalValue = 5;
final int myFinalValue = myFunction();

protected final int  initializeInstanceVariable() {

        // initialization code goes here
        myFinalValue = 5;
        
}