Переопределение методов
Способность Java делать выбор метода, исходя из типа времени выполнения, называется динамическим полиморфизмом. Поиск метода происходит сначала в данном классе, затем в суперклассе, пока метод не будет найден или не достигнут Object – суперкласс для всех классов.
Оператор instanceofдействует в этой ситуации аналогичным образом. Результатом действия будет истина, если объект является объектом одного из подклассов класса, на принадлежность к которому проверяется данный объект, но не наоборот. Проверка на принадлежность объекта к классу Object всегда даст истину как результат. Результат применения этого оператора по отношению к null всегда ложь, потому что null нельзя причислить к какому-либо типу. В тоже время литерал null можно передавать в методы по ссылке на любой объектный тип и использовать в качестве возвращаемого значения.
Отметим, что статические методы могут быть переопределены в подклассе, но не могут быть полиморфными, так как их вызов не затрагивает объекты.
Полное имя метода включает его имя, возвращаемое значение и параметры. Если два метода с одинаковыми именами находятся в одном классе, списки параметров должны отличаться. Такие методы являются перегружаемыми (overload). Если метод подкласса совпадает с методом суперкласса (порождающего класса), то метод подкласса переопределяет (overriden) метод суперкласса. Все методы Java являются виртуальными (ключевое слово virtual как в C++ не используется). Переопределение методов является основой концепции динамического связывания, реализующей полиморфизм. Когда переопределенный метод вызывается через ссылку суперкласса, Java определяет, какую версию метода вызвать, основываясь на типе объекта, на который имеется ссылка. Таким образом, тип объекта определяет версию метода на этапе выполнения. В следующем примере рассматривается реализация полиморфизма на основе динамического связывания. Так как суперкласс содержит методы, переопределенные подклассами, то объект суперкласса будет вызывать методы различных подклассов, в зависимости от того, на объект какого подкласса у него имеется ссылка.
Дата добавления: 2015-04-05; просмотров: 961;