Я пришел на этот прекрасный ответ пользователя quora "Monis Yousuf". Он это прекрасно объясняет. Я помещаю его здесь для других.
Связывание в основном представляет собой концепцию объектно-ориентированного программирования, связанного с полиморфизмом.
Во-первых, понять, что такое Полиморфизм есть. Книги говорят, что это означает «одно имя и несколько форм». Правда, но слишком абстрактно. Возьмем пример из реальной жизни.Вы идете к «Доктору», врач может быть специалистом по зрению, специалистом по ЛОР, нейрохирургом, гомеопатом и т. Д.
Здесь «врач» - это имя и может иметь несколько типов; каждый из которых выполняет свою собственную функцию. Это полиморфизм в реальной жизни.
Функция Перегрузка: Эта концепция изображает статическое связывание. Перегрузка функций может быть грубо определена, поскольку два или более метода (функции), которые имеют одинаковое имя, но разные сигнатуры (включая количество параметров, типы параметров, разные типы возврата), называются перегруженными методами (или функциями).
Предположим, вам нужно рассчитать площадь прямоугольника и круга. См. Ниже код: -
class CalculateArea {
private static final double PI = 3.14;
/*
Method to return area of a rectangle
Area of rectangle = length X width
*/
double Area(double length, double width) {
return (length * width);
}
/*
Method to return area of circle
Area of circle = π * r * r
*/
double Area(double radius) {
return PI * radius * radius;
}
}
В приведенном выше коде есть два метода «Площадь» с различными параметрами. Этот сценарий квалифицируется как перегрузка функций.
Теперь, придя к реальному вопросу: как это статическое связывание?
Когда вы вызываете какие-либо из вышеуказанных функций в вашем коде, вы должны указать параметры, которые вы передаете. В этом случае, вы пройдете либо:
- два параметра типа двойного [который будет вызывать первый метод, чтобы стоимость являются прямоугольника]
- один параметр типа двойного [который будет вызывать второй метод, чтобы вычислить площадь круга]
Так как во время компиляции java-компилятор может определить, WHICH функция для вызова, это привязка времени компиляции (или STATIC).
Переопределение функции: переопределение функции - это концепция, которая показана в наследовании. Его можно грубо определить как: когда есть метод, присутствующий в родительском классе, и его подкласс также имеет тот же метод с SAME-сигнатурой, он называется переопределением функции. [Есть еще что-то, но для простоты я написал это определение] Это будет легче понять с помощью кода ниже.
class ParentClass {
int show() {
System.out.println("I am from parent class");
}
}
class ChildClass extends ParentClass{
int show() {
System.out.println("I am from child class");
}
}
class SomeOtherClass {
public static void main (String[] s) {
ParentClass obj = new ChildClass();
obj.show();
}
}
В коде выше, метод show()
в настоящее время переопределен в одной и той же подписи (имя) и присутствует в обоих родительских и дочерних классов.
В третьем классе, SomeOtherClass
, ссылочная переменная (obj) типа ParentClass
содержит объект ChildClass. Далее, метод show(
) вызывается из той же ссылочной переменной (obj).
Снова, тот же вопрос: как это динамическое связывание?
Во время компиляции компилятор проверяет, что ссылочная переменная имеет тип ParentClass
и проверяет, существует ли способ show()
в этом классе. Как только это будет проверено, компиляция будет успешной.
Теперь, когда программы RUNS, он видит, что объект имеет номер ChildClass
и, следовательно, он выполняет метод show()
ChildClass
. Поскольку это решение принято на RUNTIME, оно называется Динамическое связывание (или полиморфизм времени выполнения).
Link за оригинальный ответ
Если это домашнее задание, вы будете лучше просить критика запланированного ответа; а не для ответа. –
@ Даниэль Л, я отметил это как домашнюю работу. Это не прямо вопрос в моей домашней работе. Я должен классифицировать кучу вещей как статические или динамические, и я пытаюсь прояснить в голове, что именно по этому вопросу. Если люди захотят ответить, они это сделают. – KingNestor
@KingNestor: Да, я видел, что это была домашняя работа;] Я понимаю, что вы сейчас имеете в виду. –