public в MainClass до private в Class extends MainClass).attempting to use incompatible return type.
public class Animal {
public Animal eat() {
System.out.println("animal eat");
return null;
}
public Long calc() {
return null;
}
}
public class Dog extends Animal {
public Dog eat() {
return new Dog();
}
/*attempting to use incompatible return type
public Integer calc() {
return null;
}
*/
}
#java #override
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2✍1👍1
В Java статические методы нельзя переопределить в строгом смысле этого слова, поскольку они связаны с классом, а не с объектом. Однако их можно скрыть (hide).
Если в подклассе объявить статический метод с той же сигнатурой, что и в суперклассе, то метод суперкласса будет скрыт в контексте подкласса.
Такое скрытие не является переопределением, потому что оно не зависит от объекта, а определяется на уровне класса.
Если вы вызываете статический метод через ссылку на суперкласс, будет вызван метод суперкласса, независимо от того, какой класс был фактически использован для создания объекта.
Пример:
class Parent {
static void staticMethod() {
System.out.println("Parent");
}
}
class Child extends Parent {
static void staticMethod() {
System.out.println("Child");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child();
parent.staticMethod(); // Parent
}
}
Почему статические методы нельзя переопределить?
Переопределение в Java работает через механизм динамической диспетчеризации, который зависит от объекта, а не от класса. Поскольку статические методы вызываются на уровне класса, такой механизм для них неприменим.
#java #static #override
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3❤2
@Override и зачем она нужна?Аннотация
@Override используется для явного указания, что метод переопределяет метод суперкласса.1️⃣ Помогает избежать ошибок, если метод из суперкласса изменен или не существует.
2️⃣ Улучшает читаемость кода.
Пример:
class Parent {
void display() {
System.out.println("Parent");
}
}
class Child extends Parent {
@Override
void display() {
System.out.println("Child");
}
}@Override, чтобы избежать случайных ошибок при переопределении методов.#java #override #annotations
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝4👍3