Довольно интересно,
Чтобы просто подтвердить себя, я создал тестовый пример, чтобы воспроизвести поведение, учитывая ниже теста и результатов испытаний
Случай 1, когда не перекрывая метод
Результаты испытаний
Пробег 1 - Создание 100000000 Сотрудники Время, затраченное на выполнение операции: 501 (мс)
Run 2 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 507 (мс)
Выполнить 3 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 502 (мс)
Случай 2 -Если переопределения метода в подпункте класса,
@Override
public int getId(){
return super.id;
}
Test Result
Run 1 - Создание 100000000 Employees Время, необходимое для завершения операции: 486 (мс)
Run 2 - Создание 100000000 Сотрудники Время, необходимое для завершения операции: 497 (мс)
Run 3 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 478 (мс)
Случай 3 - переопределение метода, но не используя супер ключевое слово
@Override
public int getId(){
return id;
}
Результат теста
Run 1 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 457 (мс)
Run 2 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 471 (мс)
Run 3 - Создание 100000000 сотрудников Время, необходимое для завершения операции: 471 (мс)
Наблюдение:
Существует минимальное улучшение при переопределении метода/использования непосредственно (случай 2 и случай 3); но в качестве наилучшей практики большинство случаев, которые переменная будет объявлена конфиденциальной, и метод будут защищены. Если сама переменная защищена, то вам нужно будет супер ключ
---------- Полный код теста для справки -----
public class TestEff {
public static void main(String[] args) {
System.out.println(" Creating 100000000 Employees ");
long st = System.currentTimeMillis();
for(int i=0;i<100000000;i++){
Manager mgr = new Manager();
int id =mgr.getId();
}
long et = System.currentTimeMillis();
long t = (et-st);
System.out.println(" Time taken to complete operation :"+t);
}
}
abstract class Employee{
protected int id;
public int getId(){
return id;
}
}
класс Менеджер расширяет Employee { @Override public int getId() { return super.id; } }
Вы повторяли оба запуска несколько раз или только вторую версию? (Ваш текст немного неясен в отношении этого.) – Omaha
Вы добавили 'getId()' в 'Employee'or' Manager'? – neutrino
'super'' Employee' является 'Object', и у него нет поля' id', поэтому это не должно компилироваться. –