Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?

При переопределении метода нельзя сузить модификатор доступа к методу (например с 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
21👍1
⌨️ Как получить доступ к переопределенным методам родительского класса?

С помощью ключевого слова super мы можем обратиться к любому члену родительского класса - методу или полю, если они не определены с модификатором private.


super.method();


#java #override #super
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132👏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🔥32
🔍 Что такое аннотация @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