class className { final [returnType] methodName() { ---------------- ---------------- } }Implementation:
class B{ final void jobA() //final method { System.out.println(“doing Job A”); } void jobB { System.out.println(“doing Job B”); } } class D extends B { void jobA() // invalid Overriding { System.out.println(“doing Job A differently”); } void jobB() // valid Overriding { System.out.println(“doing Job B differently”); } }
final class B { ------------------ } class D extends B // Invalid Inheritance { ------------------ }
Method parameters can also be declared as final.
Final variables can be of two types:class Rect { int l=100,b=20; } class Experiments { final int v1=10; //final primitive variable final int v2; static final int v3=30; // static & final primitive variable final Rect ref=new Rect(); //final reference variable public Experiments() { v2=20; // initialization of final primitive variable } void showAll() { //v1=v1+5; // Invalid // ref=new Rect(); // Invalid System.out.println(“v1: “+v1); //10 System.out.println(“v2: “+v2); //20 System.out.println(“v3: “+v3); //30 System.out.println(“ref.l: “+ref.l); // 100 ref.l=ref.l+100; //valid System.out.println(“After Change Ref.l: “+ref.l); //200 final int localFinal=555; //local final variable System.out.println(“Local Final:”+localFinal);//555 //localFinal=666; //Invalid } } public class FinalVarDemo { public static void main(String[] args) { Experiments ex=new Experiments(); ex.showAll(); } }
Output: v1: 10 v2: 20 v3: 30 ref.l: 100 After Change Ref.l: 200 Local Final:555