Как уже обсуждалось ранее, свойство переопределения метода применяется к вызову метода в лунке базового класса.
К этому java применяется полиморфизм времени выполнения , т. Е. На основе объекта, который вызывается во время выполнения,определяется метод, который должен быть выполнен. Например,
- Если для вызова метода используется объект суперкласса, то будет выполнен метод суперкласса.
- Если для вызова метода используется объект подкласса, будет выполнен метод подкласса.
Если мы не хотим переопределять, мы можем сделать родительский метод какprivate
вместо значения по умолчанию личный пакет .Теперь мы получим 30 в качестве выхода. Поскольку метод, который не может быть унаследован, он не может быть переопределен
class Base {
int value = 0;
Base() {
addValue();
}
private void addValue() {
value += 10;
}
int getValue() {
return value;
}
}
class Derived extends Base {
Derived() {
addValue();
}
void addValue() {
value += 20;
}
}
public class Test{
public static void main(String[] args) {
Base b = new Derived();
System.out.println(b.getValue());
}
}
Теперь, вывод равен 30 .