Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Для отказа от переопределения






Хотя переопределение методов — одно из наиболее мощных свойств Java, может появиться потребность отказаться от него. Чтобы отменить переопре­деление метода, укажите модификатор final в начале его объявления. Мето­ды, объявленные как final, не могут переопределяться. Следующий фраг­мент иллюстрирует final в таком применении:

class A {

final void meth () {

System. out.println (" Это метод final.");

class В extends A {

void meth() { // ОШИБКА! Нельзя переопределять

System. out.println (" Ошибка! ");

Поскольку meth() объявлен как final, он не может быть переопределен в классе в. Если вы попытаетесь сделать это, то получите ошибку во время компиляции.

Методы, объявленные как final, могут иногда улучшать эффективность. Компилятору предоставлено право выполнять встроенные (inline) вызовы таких методов, потому что он " знает", что те не будут переопределяться под­классом. Когда речь идет о небольшой, например, final-функции, то ком­пилятор Java часто может копировать (встраивать) байт-код подпрограммы прямо в точку вызова откомпилированного кода вызывающего метода, уст­раняя таким образом дополнительные затраты времени, связанные с обыч­ным вызовом (невстроенного метода). Встраивание допустимо только для final-методов. Обычно Java организует вызовы методов динамически, во время выполнения. Это называется поздним связыванием (вызова с вызывае­мой функцией). Однако, т. к. final-методы не являются переопределяемы­ми, их вызов может быть организован во время компиляции. Это называется ранним связыванием.

 

Использование final для отмены наследования

Иногда нужно разорвать наследственную связь классов (отменить наследо­вание одного класса другим). Чтобы сделать это, предварите объявление класса ключевым словом final, что позволит неявно объявить и все его методы. Заметим, что недопустимо объявлять класс одновременно как abstract и final, т. к. абстрактный класс неполон сам по себе и полагается на свои подклассы, чтобы обеспечить полную реализацию. Пример final-класса:

final class A {

// Следующий класс незаконный.

class В extends А { //ОШИБКА! В не может быть подклассом А

Комментарий здесь означает, что в не может наследовать а, т. к. а объявлен

как final.

Класс Object

В Java определен один специальный класс — object. Все другие классы яв­ляются его подклассами. Object — это суперкласс всех других классов. Это означает, что ссылочная переменная типа object может обращаться к объек­ту любого другого класса. Кроме того, т. к. массивы реализуются как клас­сы, переменная типа object может также обращаться к любому массиву.

object определяет методы(см. ниже), что означает, что они доступны в каж­дом объекте.

Метод Цель Object clone () Создает новый объект, который является таким же, как имитируемый объект boolean equals (Object object) Определяет, является ли один объект рав­ным другому void finalize () Вызывается прежде, чем неиспользованный объект будет переработан (сборщиком му­сора) Class getClass () Получает класс объекта во время выполнения int hashCode() Возвращает хэш-код, связанный с вызовом объекта void notify () Возобновляет выполнение потока, ожидаю­щего на объекте вызова void notifyAU() Возобновляет выполнение всех потоков, ожидающих на объекте вызова String toString() Возвращает строку, которая описывает объект void wait () Ждет выполнения на другом потоке void wait (long millisrconds) void wait (long millisrconds, int nanoseconds)

Методы getClassO, notify(), notifyAll() И wait() объявлены как final.

Другие можно переопределять. Указанные методы описаны в других местах этой книги. Здесь отметим два метода: equals() и tostring(). Метод equals () сравнивает содержимое двух объектов. Он возвращает true, если объекты эквивалентны, и false— в противном случае. Метод Tostringo возвращает строку, содержащую описание объекта, на котором он вызывает­ся. Кроме того, этот метод вызывается автоматически, когда объект выво­дится методом printin (). Много классов переопределяют данный метод, что позволяет им приспосабливать описание специально для типов объектов, которые они создают.







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.