Путаница с полиморфизмом Java - PullRequest
0 голосов
/ 27 мая 2018

Я читал о полиморфизме, и после некоторого поиска я был озадачен различием полиморфизма во время компиляции и во время выполнения.

Допустим, у меня есть класс ABC и еще один класс, который расширяет ABC, класс DEF примерно так:

class ABC{
    public void myMethod(){
    System.out.println("Overridden Method");
   }
}

public class DEF extends ABC{
    public void myMethod(){
    System.out.println("Overriding Method");
    }
}

public static void main(String args[]){
   ABC obj = new DEF();
   obj.myMethod();
   }
}

Если мы хотим иметь возможность заменить класс другим классом, который выполняет ту же задачу, но другим способом без , имеющим слишком Перекомпилируйте класс, который их вызывает. Переопределяет ли метод перегрузку метода или метода?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Полагаю, вы спрашиваете о двух вещах

1) Я читал о полиморфизме, и после некоторого поиска я был озадачен различием полиморфизма во время компиляции и во время выполнения.

Давайте немного разделим воду здесь ...

Во время компиляции компилятор проверяет и преобразует код в байт-коды.Вызовы статических методов разрешаются на этом этапе, так что вы знаете, что каждый раз, когда статический метод вызывается, один и тот же, и происходит единственная реализация.

полиморфизм во время выполнения - это то, что происходит при выполнениирешить, какую реальную реализацию данного метода выбрать.Учитывая, что каждый класс в иерархии обеспечивает одну реализацию этого «полиморфного» метода.За кулисами компилятор проделывает большую работу по архивированию, используя механизм, известный как поздняя привязка .

2) Если мы хотим иметь возможность заменить класс надругой класс, который выполняет ту же задачу, но другим способом, без необходимости перекомпиляции вызывающего их класса. Переопределяет ли метод перегрузку метода или метода?

Вы на самом деле не говорите, что заменяет , inteads говорит о , расширяет , это то, что вы делаете, когда класс расширяет другой .И реализации метода в родительском классе могут быть перезаписаны в подклассе. Перегрузка , не имеет ничего общего с иерархиями, заключается в написании того же метода с набором параметров, отличающихся от других.

0 голосов
/ 27 мая 2018

Перегрузка - это когда вы создаете несколько классов с одинаковым именем метода, но разными параметрами.Если подкласс имеет точно такое же имя метода и параметры, он действительно перезаписывается, независимо от того, поместил ли вы @overwrite сверху или нет.Это буквально та же самая вещь, и в любом случае вы можете изменить результат метода, даже если вы используете базовый / суперкласс в качестве типа.

Это может быть полезно Когда вы используетеАннотация Java @Override и почему?

Вы заставите свой компилятор жаловаться на то, что вы на самом деле не перезаписываете функцию, если вы неправильно наберете один из двух символов, и ничего не будет перезаписано, и вы сделаетекод легче читать.Это не повлияет на результат, но вы все равно должны использовать его по этим причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...