Частные и конечные методы в Java

Опубликовано: 15 Февраля, 2022

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() {}
  
   // The above method foo() is same as following. The keyword 
   // final is redundant in above declaration.
  
   // private void foo() {}
}

Например, обе «программа 1» и «программа 2» ниже вызывают одну и ту же ошибку компилятора «foo () имеет частный доступ в Base».

Program 1

// file name: Main.java
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

// file name: Main.java
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();
    }
}

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .