Статический метод, переменная, блок или вложенный класс принадлежит всему классу , а не объекту.
Метод в Java используется для представления поведения объекта / класса. Здесь, так как метод static (то есть статический метод используется для представления поведения только класса.) изменение / переопределение поведение всего класса будет нарушать явление одного фундаментальной основы объектно-ориентированного программирования, т. е. высокая когезия . (помните, что конструктор - это особый метод в Java.)
Высокая сплоченность - Один класс должен иметь только одну роль. Например: автомобильный класс должен производить только автомобильные объекты, а не велосипед, грузовики, самолеты и т. Д. Но у автомобильного класса могут быть некоторые особенности (поведение), которые принадлежат только ему самому.
Поэтому при разработке языка программирования Java. Разработчики языка решили позволить разработчикам сохранять некоторые поведения класса при себе, делая метод статичным по своей природе.
Приведенный ниже фрагмент кода пытается переопределить статический метод, но не столкнется с какой-либо ошибкой компиляции.
public class Vehicle {
static int VIN;
public static int getVehileNumber() {
return VIN;
}}
class Car extends Vehicle {
static int carNumber;
public static int getVehileNumber() {
return carNumber;
}}
Это потому, что здесь мы не переопределяем метод, а просто повторно объявляем его. Java допускает повторное объявление метода (статический / нестатический).
Удаление статического ключевого слова из метода getVehileNumber () класса Car приведет к ошибке компиляции, поскольку мы пытаемся изменить функциональность статического метода, который относится только к классу Vehicle.
Кроме того, если getVehileNumber () объявлен как final , то код не будет компилироваться, поскольку ключевое слово final ограничивает программиста от повторного объявления метода.
public static final int getVehileNumber() {
return VIN; }
В целом, разработчики программного обеспечения должны решать, где использовать статические методы.
Лично я предпочитаю использовать статические методы для выполнения некоторых действий без создания какого-либо экземпляра класса. Во-вторых, чтобы скрыть поведение класса от внешнего мира.