Многие студенты глупы и не могут определить разницу между перегрузкой и переопределением. Рекомендуется не запоминать концептуальные знания по Rote, но понять и запомнить его.
Позвольте мне сначала дать мое определение:
Перегрузка: в одном и том же классе или в отношениях наследования группа методов с одинаковым именем и разными параметрами. По сути, это имя разных методов.
Переопределение: между двумя классами, которые имеют отношения наследования, методы, которые существуют в родительском классе, переопределяются в подклассе. Суть состоит в том, чтобы дать различные реализации для одного и того же метода.
Давайте сначала посмотрим на пример перегрузки:
public Class reveloadParent {public String getPerson (string name) {return "persona" + name; } public String getPerson (int age) {return "personb"; } public String getPerson (String name, int age) {return "personc"; } public void getPerson (String name) {System.out.println ("Я перегруженный метод?"); }} Public Class reveloadChildExtends reveloadParent {public void getPerson (Double Money) {System.out.println («Я перегружен метод»); }}Обратите внимание на наблюдение:
(1) Есть 4 метода с тем же именем в перегрузке.
(2) Типы параметров и числа первых трех методов непоследовательны, а возвратное значение одинаково, что представляет собой перегрузку
(3) Метод 4 и метод 1 только возвращаемые значения различны и не являются перегрузкой, и компилятор не проходит.
PS: возвращаемое значение является результатом выполнения метода. Когда мы вызовываем метод, мы не будем указывать «Я хочу вызвать метод с возвратным значением типа XXX», он не станет функцией перегрузки метода.
(4) Перегрузки наследуют демонстрацию, и в нем есть все методы, принадлежащие демонстрации. Казалось, что существующий метод не мог удовлетворить потребности, поэтому он просто перегружен.
Перегруженные флаги: имя метода одинаково, параметры различны (число или тип) и не имеют ничего общего с возвратным значением.
Давайте посмотрим на пример перезаписи:
public class overrideparent {public void fly () {System.out.println ("Ican Fly!"); }} public class overdechild extends overrideparent {@override public void fly () {system.out.println ("Icant Fly, но я могу запустить!"); } public static vid main (string [] args) {everwriteparent child = new sopwritechild (); Child.fly (); }}Что будет выводиться при выполнении основного метода Repidechild?
Ответ: я не могу накапливаться, но я могу бежать!
Мы видим:
(1) RepideChild и Override ProaveRent имеют метод мухи
(2) Возвратное значение и модификатор мухи одинаковы, только тело метода отличается
(3) перед методом подкласса есть аннотация @overwrite. JDK1.5 появляется и используется только для наследования класса. 1.6 может использоваться для реализации интерфейса. Эта аннотация помогает компилятору проверить, и это нормально, чтобы не добавлять ее.
Переопределенные флаги: ребенок наследует родительский класс и имеет разные реализации для одного и того же метода.
Сценарии приложения
Перегрузка: когда функции метода похожи, но необходимо пройти разные параметры.
Переопределение: когда подкласс имеет свое уникальное поведение, он наследует от родительского класса и не может удовлетворить свои собственные потребности.
PS: перегрузка и перезагрузка являются проявлениями полиморфизма. Первый - это полиморфизм компилятора, в то время как последний - полиморфизм времени выполнения.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!