Files
obsidian/Программирование на Java/ООП/Наследование/Сокрытие.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

71 lines
2.9 KiB
Markdown

Краткие правила были описаны в [Наследование](Наследование.md), сейчас будут примеры
## Сокрытие поля
```Java
class Base {
protected int protField = 3;
public int pubField = 4;
public static int statField = 5;
}
class Extended extends Base {
protected float protField = 7.0f;
public float pubField = 8.0f;
public static int statField = 9;
print(this.protField) // 7.0
print(super.protField) // 3
print(this.pubField) // 8
print(super.pubField) // 4
print(statField) // 9
print(Base.statFiel) // 5
}
```
Если имя поля в подклассе и в суперклассе одинаковое
- Поле подкласса скрывает поле суперкласса
- Статическое поле суперкласса доступно по имени класса `BaseClass.staticField`
- Нестатическое поле суперкласса доступно с помощью super: `super.instanceField`
- Скрытое поле может иметь другой тип
- Поле может стать `static`, если было не статик. И наоборот
## Сокрытие метода
Только для статиков
```Java
class Base {
public int getVal() {
return 1;
}
public static int statVal() {
return 3;
}
}
class Ext extends Base {
public int getVal() {
return 2;
}
public static int statVal() {
return 4;
}
}
Base b = new Base();
Ext e = new Ext();
Base be = new Ext();
print(b.statVal()) // 3
print(e.statVal()) // 4
print(be.statVal()) // 3 - по типу ссылки для статики
print(b.getVal()) // 1
print(e.getVal()) // 2
print(be.getVal()) // 2 - просто переопределение
```
Если [](../../Синтаксис%20и%20типы/Работа%20с%20данными%20и%20типами/Функции.md#Сигнатура|сигнатура) (имя и параметры) статического метода в подклассе и в суперклассе одинаковая
- Статический метод подкласса скрывает метод суперкласса
- Статический метод суперкласса доступен по имени класса `BaseClass.staticMethod()`
- Модификатор доступа может только расшириться (правило как в [переопределении](Переопределение.md))
- Возвращаемое значение должно быть ковариантным (тоже как в переопределении)
- Менять статик на нон-статик и обратно запрещено
## P.S.
Сокрытие методов в целом плохая практика, обращаться к статике по объектам - плохой тон