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