Содержание
На прошлой неделе я написал метод скрытия и переопределения Java-метода: переопределить статический метод в Java здесь.
Но я понял, что стоит поделиться еще информацией о методе Java Overriding ,
Правила переопределения метода:
- В Java метод может быть написан только в подклассе , но не в том же классе.
- Список аргументов должен быть точно таким же, как и у переопределенного метода.
- Возвращаемый тип должен быть тем же или подтипом возвращаемого типа, объявленного в исходном переопределенном методе в суперклассе .
- Уровень доступа не может быть более ограничительным, чем уровень доступа переопределенного метода.
- Например: если метод суперкласса объявлен как открытый, то метод переопределения в подклассе не может быть ни частным, ни защищенным .
- Методы экземпляра могут быть переопределены, только если они наследуются подклассом.
- Метод, объявленный как final, не может быть переопределен.
- Метод, объявленный как static, не может быть переопределен, но может быть повторно объявлен.
- Если метод не может быть унаследован, он не может быть переопределен.
- Подкласс в том же пакете, что и суперкласс экземпляра, может переопределить любой метод суперкласса, который не объявлен как private или final.
- Подкласс в другом пакете может переопределять только не финальные методы, объявленные как открытые или защищенные.
- Переопределяющий метод может выдавать любые непроверенные исключения независимо от того, переопределяет ли метод исключительные ситуации или нет.
- Однако переопределяющий метод не должен генерировать проверенные исключения, которые являются новыми или более широкими, чем те, которые объявлены переопределенным методом. Переопределенный метод может генерировать более узкие или меньшие исключения, чем переопределенный метод.
- Конструкторы не могут быть переопределены.
Пример примера:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
пакет ком . crunchify. учебные пособия ;
общественности учебный класс CrunchifyObjectOverriding {
общественности статический недействительным главная ( Строка args [ ] ) {
Компания знак равно новый Компания ( ) ; // Справочник компании и объект
Компания б знак равно новый eBay ( ) ; // Ссылка на компанию, но объект eBay
а . адрес ( ) ; // запускает метод в классе компании
б. адрес ( ) ; // Запускает метод в классе eBay
}
}
учебный класс Компания {
общественности недействительным адрес ( ) {
Система. вне. println ( «Это адрес Crunchify Company …» ) ;
}
}
учебный класс eBay продолжается Компания {
общественности недействительным адрес ( ) {
Система. вне. println ( «Это адрес eBay …» ) ;
}
}
|
Результат:
|
1
2
|
это является Адрес Crunchify компании. , ,
это является eBay Rock 's Адрес. , ,
|
В приведенном выше примере вы можете увидеть, что хотя b это тип Company он запускает метод перемещения в eBay учебный класс.
Reason:Во время компиляции проверка производится по ссылочному типу. Однако во время выполнения JVM определяет тип объекта и запускает метод, который принадлежит этому конкретному объекту .
Поэтому в приведенном выше примере программа будет правильно скомпилирована, поскольку Company класс имеет метод move. Затем во время выполнения он запускает метод, специфичный для этого объекта.
Используя ключевое слово super:
При вызове версии переопределенного метода суперкласса super ключевое слово используется.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
пакет ком . crunchify. учебные пособия ;
общественности учебный класс CrunchifyObjectOverriding {
общественности статический недействительным главная ( Строка args [ ] ) {
Компания знак равно новый Компания ( ) ; // Справочник компании и объект
Компания б знак равно новый eBay ( ) ; // Ссылка на компанию, но объект eBay
а . адрес ( ) ; // запускает метод в классе компании
б. адрес ( ) ; // Запускает метод в классе eBay
}
}
учебный класс Компания {
общественности недействительным адрес ( ) {
Система. вне. println ( «Это адрес Crunchify Company …» ) ;
}
}
учебный класс eBay продолжается Компания {
общественности недействительным адрес ( ) {
супер. адрес ( ) ; // вызывает метод суперкласса
Система. вне. println ( «Это адрес eBay …» ) ;
}
}
|
Результат:
|
1
2
3
|
это является Адрес Crunchify компании. , ,
это является Адрес Crunchify компании. , ,
это является eBay 's Адрес. , ,
|
0.00 (0%) 0 votes







