Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Есть ли в Java раннее связывание?

#java


Модификатор final в Java не обеспечивает раннее связывание метода (на этапе компиляции),
лишь не дает определить метод в наследнике с такой же сигнатурой и в том числе переопределить
соответствующий метод предка, так ли это?
Вопрос: Есть ли в Java ранее связывание, то есть когда уже на этапе компиляции вызову
метода ставится в соответствие код который будет выполняться?    


Ответы

Ответ 1



Цитата из источника: Полиморфизм в Java: Если перегруженные методы с одинаковыми именами находятся в одном классе, списки параметров должны отличаться. Но если метод подкласса совпадает с методом суперкласса (порождающего класса), то метод подкласса переопределяет метод суперкласса. Совпадать при этом должны и имена методов и типы входных и выходных параметров. В данном случае переопределение методов является основой концепции динамического связывания (или позднее связывание), реализующей полиморфизм. Суть динамической диспетчеризации методов состоит в том, что решение на вызов переопределенного метода принимается во время выполнения, а не во время компиляции. Однако final-методы не являются переопределяемыми, их вызов может быть организован во время компиляции и называется ранним связыванием.

Ответ 2



final по самому простому привязывает переменную к значению, тем самым делая ее константой, т. е. final int a = 0; // a всегда будет 0

Ответ 3



А как же overloading? public class LinkageTest { public static class Parent { public void test() { System.out.println("parent::test"); } } public static class Child extends Parent { public void test() { System.out.println("child::test"); } } public static class Tester { public void test(Parent obj) { System.out.println("Testing parent..."); obj.test(); } public void test(Child obj) { System.out.println("Testing child..."); obj.test(); } } public static void main(String[] args) { Parent obj = new Child(); Tester t = new Tester(); t.test(obj); } } Вывод: Testing parent... child::test

Комментариев нет:

Отправить комментарий