Java
In this tutorial we will learn about final methods in Java programming language.
In the previous tutorial we learned about final variables to create constants. Feel free to check that out.
We know that a child class inherits all the inheritable methods and variables from the parent class.
And in the method overridding tutorial we learned that a child class can override inherited methods of the parent class.
But in some scenarios we may not want the child class to override the methods of the parent class. And this is were we use the final methods.
final
If we don't want a method to be overridden then we set the modifier of the method to final.
class MyClass { final type myMethod(param_list) { // some code goes here... } }
Where MyClass is the name of the class and it has a method by the name myMethod.
MyClass
myMethod
The return type of the method is denoted by type.
type
The modifier is set to final so, any class inheriting this class can't override the method.
In the following example we have the parent class or superclass Hello having a greetings method that is marked final.
Hello
greetings
So, the child class or subclass Awesome won't be able to override the inherited greetings method.
Awesome
class Hello { // this method is marked as final // so any child class inheriting // this class won't be able to // override this method final void greetings() { System.out.println("Hello World"); } } class Awesome extends Hello { // overriding of greetings method not allowed /** * void greetings() { * System.out.println("Action"); * } */ void message() { System.out.println("Message"); } } // main class public class Example { public static void main(String[] args) { // creating an object Awesome obj = new Awesome(); // calling methods obj.greetings(); obj.message(); } }
Output:
$ javac Example.java $ java Example Hello World Message
If we try to override the final method then we will get the following error.
$ javac Example.java Example.java:15: error: greetings() in Awesome cannot override greetings() in Hello void greetings() { ^ overridden method is final 1 error
In the following example we have a class Box and it has a final method getVolume which can't be overridden.
Box
getVolume
Then we have another class GiftBox that inherits the Box class.
GiftBox
We are using the super keyword to call the constructor of the parent class and initialise the dimensions of the GiftBox.
class Box { // member variables private double length; private double width; private double height; // constructor Box() { this.length = 0; this.width = 0; this.height = 0; } // constructor with parameters Box(double length, double width, double height) { this.length = length; this.width = width; this.height = height; } // this method is set as final // so it can't be overridden in // the child class final double getVolume() { return this.length * this.width * this.height; } } // this class is inheriting // the Box class class GiftBox extends Box { // member variables private double price; // constructor GiftBox() { // calling the constructor // of the parent class Box super(); // setting the price this.price = 0; } // constructor with parameters GiftBox(double price, double length, double width, double height) { // calling the constructor // of the parent class Box super(length, width, height); // setting the price this.price = price; } // the getVolume method is inherited // but we can't override it // as it is a final method // in the parent class Box } // main class public class Example { public static void main(String[] args) { // instantiate object GiftBox obj = new GiftBox(99, 5, 4, 3); // calling the method double volume = obj.getVolume(); // output System.out.println("Volume of the GiftBox: " + volume); } }
$ javac Example.java $ java Example Volume of the GiftBox: 60.0