Для выполнения программы Java требуется два шага: компиляция и исполнение (интерпретация), а Java является объектно-ориентированным языком программирования. Когда подкласс и родительский класс имеют тот же метод, подкласс переопределяет метод родительского класса. Когда программа вызывает метод во время выполнения, независимо от того, называется ли метод родительского класса или подкласс переопределен, это должна быть проблема, с которой мы сталкиваемся, когда мы начинаем изучать Java. Здесь мы сначала определяем, какой метод для реализации или операции переменной для определения этого вызова называется привязкой.
В Java есть два метода связывания, одним из них является статическое связывание, также известное как раннее связывание. Другим типом является динамическое связывание, также известное как позднее связывание.
Концепция связывания программы:
Привязка относится к ассоциации метода вызова с классом (тело метода), где находится метод. Для Java связывание делится на статическое связывание и динамическое связывание; Или это называется ранним связыванием и поздним связыванием.
Статическое связывание (раннее связывание компилятора):
Метод был связан до выполнения программы и реализована компилятором или другой программой подключения. Например: C. Для Java это можно понимать как связывание в течение периода компиляции программы; В частности, единственными методами в Java являются окончательные, статические, частные и конструкторы, которые предварительно связывают
Динамическое связывание (позднее связывание во время выполнения):
Позднее привязка: связывается в соответствии с типом конкретного объекта во время выполнения.
Если язык реализует позднее обязательство, необходимо предоставить некоторые механизмы, чтобы определить тип объекта во время работы и вызывать соответствующие методы отдельно. Другими словами, компилятор по -прежнему не знает типа объекта в настоящее время, но механизм вызова, вызывающий метод может исследовать его само по себе и найти правильный корпус метода. У разных языков есть разные способы внедрения позднего привязки. Можно подумать, что все они должны вставить определенные специальные типы информации в объект.
Динамический процесс привязки:
Резюме о связывании:
Понимая концепцию трех, мы обнаружили, что Java принадлежит к позднему обязательству. В Java почти все методы являются поздним связыванием, а динамически методы связывания - это подклассы или базовые классы во время выполнения. Но есть и специальные функции. Поскольку статические методы и окончательные методы не могут быть унаследованы, их значения могут быть определены во время компиляции. Они принадлежат к раннему связующему. Чтобы быть особенно отмеченным, методы и переменные -члены, объявленные Private, не могут быть унаследованы подклассами, и все частные методы неявно определены как окончательные (из этого мы знаем, что метод, объявленный как окончательный тип, заключается в предотвращении перезаписываемого метода и эффективного закрытия динамического связывания в Java). Пост-связывание в Java реализовано JVM. Нам не нужно явно объявлять это, но C ++ отличается. Мы должны явно заявить, что метод имеет пост-связывание. Вверх трансформация или полиморфизм в Java достигаются посредством динамического связывания, поэтому понимание динамического связывания означает восходящее трансформацию и полиморфизм.
Для методов в Java, за исключением конечных, статических, частных и конструкторов, которые являются ранним связыванием, все другие методы являются динамическим связыванием. Типичное динамическое связывание происходит при объявлении конверсии родительского класса и класса ребенка:
Например: родитель p = new Children ();
Конкретный процесс заключается в следующем:
1. Компилятор проверяет тип объявления и имя метода объекта. Предположим, что мы называем метод XF (ARGS), и X был объявлен как объект класса C, затем в компиляторе будут перечислены все методы, названные F в классе C, и методы, унаследованные от суперкласса класса C.
2. Затем компилятор проверяет типы параметров, представленные в вызове метода. Если один тип параметра среди всех методов с именем F соответствует типу параметра, предоставляемого Call наибольшим, то этот метод вызывается. Этот процесс называется «Перегрузку
3. Когда программа запускается и использует динамическую привязку для методов вызова, виртуальная машина должна вызвать версию метода, которая соответствует фактическому типу объекта, на который указан x. Предполагая, что фактический тип - d (подкласс C), если класс D определяет F (String), то метод вызывается, в противном случае метод F (строка) будет искать в Superclass D и так далее.
Вопрос мысли:
Как предоставить пользователю методу метод для выполнения задачи. Если у пользователя есть особые требования, ему или ей нужно настроить свой собственный метод?
Знание вовлечено:
Класс детей-родителей, интерфейс, преобразование вверх, динамическое связывание
Конкретный код:
Пакет com.chengxuyuanzhilu; public interface myInterfaces {void doting ();} пакет com.chengxuyuanzhilu; открытый класс напиток реализует myInterfaces {@override public void doting () {System.out.println («Я пью воду»); }} Пакет com.chengxuyuanzhilu; открытый класс Eat Regraints MyInterfaces {@Override public void doting () {System.out.println («Я ем»); }} пакет com.chengxuyuanzhilu; public class run реализует myInterfaces {@Override public void doting () {System.out.println («Я работаю»); }} пакет com.chengxuyuanzhilu; public class testdynamicbind {public static void main (string [] args) {myInterfaces my = null; my = new eat (); Bind (my); мой = новый напиток (); Bind (my); my = new Run (); Bind (my); } static void bind (myInterfaces my) {my.doting (); }}Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.