When we use final specifier with a method, the method cannot be overridden in any of the inheriting classes. Methods are made final due to design reasons.
Since private methods are inaccessible, they are implicitly final in Java. So adding final specifier to a private method doesn’t add any value. It may in-fact cause unnecessary confusion.
class Base {
private final void foo() {}
}
|
For example, both ‘program 1’ and ‘program 2’ below produce same compiler error “foo() has private access in Base”.
Program 1
class Base {
private final void foo() {}
}
class Derived extends Base {
public void foo() {}
}
public class Main {
public static void main(String args[]) {
Base b = new Derived();
b.foo();
}
}
|
Program 2
class Base {
private void foo() {}
}
class Derived extends Base {
public void foo() {}
}
public class Main {
public static void main(String args[]) {
Base b = new Derived();
b.foo();
}
}
|
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Feeling lost in the vast world of Backend Development? It's time for a change! Join our
Java Backend Development - Live Course and embark on an exciting journey to master backend development efficiently and on schedule.
What We Offer:
- Comprehensive Course
- Expert Guidance for Efficient Learning
- Hands-on Experience with Real-world Projects
- Proven Track Record with 100,000+ Successful Geeks
Last Updated :
27 May, 2017
Like Article
Save Article