TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #114 5.86K
Можно ли переопределить статические методы ?
Спросят с вероятностью 12%

Статические методы не подлежат переопределению в том смысле, в каком обычно используется термин "переопределение" для методов экземпляра. Переопределение подразумевает, что вызов метода на объекте будет определяться типом этого объекта во время выполнения программы. Однако статические методы привязаны к классу, а не к инстанции класса, и выбор конкретного метода для вызова происходит во время компиляции, а не выполнения программы, и основывается на типе переменной, через которую производится вызов.

Тем не менее, статические методы могут быть "скрыты" в подклассах. Если подкласс определяет статический метод с той же сигнатурой, что и статический метод в суперклассе, то метод подкласса "скрывает" метод суперкласса. Это не считается переопределением в строгом смысле, поскольку это не влияет на процесс выбора метода для вызова — он по-прежнему определяется во время компиляции исходя из типа ссылки, а не типа объекта.

Пример:
class Parent {
static void test() {
System.out.println("Метод из Parent");
}
}

class Child extends Parent {
static void test() {
System.out.println("Метод из Child");
}
}

public class Main {
public static void main(String[] args) {
Parent parent = new Parent();
Parent childAsParent = new Child();
Child child = new Child();

parent.test(); // Выводит: Метод из Parent
childAsParent.test(); // Выводит: Метод из Parent, несмотря на то, что объект типа Child
child.test(); // Выводит: Метод из Child
}
}


В этом примере, несмотря на то что переменная childAsParent ссылается на объект типа Child, вызывается статический метод класса Parent, потому что тип данной переменной — Parent, и решение о том, какой метод вызвать, принимается во время компиляции на основе типа переменной.

Хотя статические методы не могут быть переопределены в том же смысле, что и методы экземпляра, они могут быть скрыты в подклассах. Это поведение отличается от переопределения и важно понимать различие, чтобы избежать путаницы при работе с наследованием и статическими методами.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
  • 👍 26
  • ❤ 4
  • 👾 2
More from @easy_java_ru
  1. Oct 12, 2026🤔 Жизненный цикл сервлетов? 1. Загрузка и инициализация (init); 2. Обработка запроса (ser…
  2. Oct 12, 2026🤔 Как остановить поток? Остановить поток в Java можно несколькими способами, но важно пом…
  3. Oct 11, 2026🤔 Какой класс позволяет читать данные из входного байтового потока в формате примитивных…
  4. Oct 11, 2026🤔 Чем отличается where от having ? WHERE и HAVING используются для фильтрации записей, но…
  5. Oct 10, 2026🤔 На основании какой структуры данных реализован ArrayList? ArrayList реализован на базе…
  6. Oct 9, 2026🤔 Что такое «HTML»? HTML (HyperText Markup Language) — это язык разметки, используемый дл…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →