Files
obsidian/Программирование на Java/ООП/Наследование/Сокрытие.md
T
roma-dxunvrs 4fabe16272 04.09
2026-09-04 22:55:43 +03:00

2.7 KiB

Краткие правила были описаны в Наследование, сейчас будут примеры

Сокрытие поля

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, если было не статик. И наоборот

Сокрытие метода

Только для статиков

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 - просто переопределение

Если Функции#Сигнатура (имя и параметры) статического метода в подклассе и в суперклассе одинаковая

  • Статический метод подкласса скрывает метод суперкласса
  • Статический метод суперкласса доступен по имени класса BaseClass.staticMethod()
  • Модификатор доступа может только расшириться (правило как в Переопределение)
  • Возвращаемое значение должно быть ковариантным (тоже как в переопределении)
  • Менять статик на нон-статик и обратно запрещено

P.S.

Сокрытие методов в целом плохая практика, обращаться к статике по объектам - плохой тон