Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

Image picture;

...

public void paint(Graphics g)

{

...

// Рисование изображения типа Image

g.drawlmage(picture, 35, 35, this); // this - ссылка апплета на себя

}

}

Когда требуется устранить неоднозначность при использовании двух переменных с одним именем, одна из которых является полем класса, другая - локальной переменной.

Обращение к полю класса в этом случае: this.имя_поля_класса

super — используется как ссылка на экземпляр суперкласса с целью обеспечения доступа к нестатическим полям и методам суперкласса.

Доступ к полю суперкласса обеспечивается выражением: super.имя_поля_класса

Пример:

class ClassA { float x;

...

}

class ClassB extends ClassA { int x;

...

public void method l(int x) {

int iX1 = x; // присваивание значения параметра метода int iX2 = this.x; // присваивание значения поля данного класса float fX = super.x; // присваивание значения поля суперкласса

}

}

Доступ к методу суперкласса обеспечивается выражением: super.имя_метода_класса()

Возможность обращения к методу суперкласса полезна при переопределении метода. Если необходимо, в теле переопределенного метода в классе-потомке можно организовать вызов кода старого метода из суперкласса. Например:

class ClassA {

...

public void method2() {...} ...

}

class ClassB extends ClassA {

...

public void method2() { super.method2();

}

}

Использование this и super в конструкторах — см. пример ConstrDemo.java с комментариями.

Интерфейсы в Java

Технология множественного наследования, реализованная в языке C++, позволяет некоторому классу наследовать различные наборы свойств от нескольких суперклассов, однако создает множество проблем для разработчиков компиляторов, часто служит причиной появления в программах скрытых ошибок. При разработке Java специалисты Sun предпочли исключить из этого языка возможность прямого множественного наследования классов и использовать интерфейсы.

Интерфейс — это подобие абстрактного класса, особый вид класса без реализации. Интерфейс

реализуется классом.

Объекты одного класса используют общее поведение (методы). Интерфейс позволяет дополнить описание поведения объекта новыми функциональными возможностями, объявляя набор методов, которые должен поддерживать класс,

реализующий данный интерфейс. Реализация методов осуществляется в классе, а не в интерфейсе.

17

Скачано с сайта http://ivc.clan.su

Интерфейс представляет собой набор методов без реализации (без тел), который впоследствии может быть реализован классом. В интерфейсе указывается, что некоторый класс должен делать, но не

как он это делает. Для реализации интерфейса класс должен определить полный набор методов,

которые объявлены в интерфейсе. При этом класс может реализовывать методы интерфейса любым способом, наиболее предпочтительными точки зрения разработчика класса.

Класс в Java может реализовывать несколько интерфейсов, и один интерфейс -использоваться несколькими классами.

Таким образом, интерфейсы можно использовать для придания определенных функциональных возможностей (иными словами, способностей — "ability" — выполнять определенные функции) самым разнообразным классам: как классам,

которые исходно совершенно не связаны между собой, так и классам, связанным между собой иерархией наследования. В Java есть немало интерфейсов, названии которых имеется характерный суффикс "able" (например, Runnable).

Определение интерфейса, как и определение класса в Java, содержит два компонента:

объявление и тело.

Объявление интерфейса имеет вид:

[public] interface Имя_интерфейса *extends Список_суперинтерфейсов+

1.Модификаторы интерфейса

public — спецификатор доступа — указывает, что к данному интерфейсу возможен доступ из других пакетов. В случае отсутствия спецификатора public, доступ разрешен только внутри пакета, в котором интерфейс находится.

Подобно классам public, интерфейс public должен описываться в файле с именем Имя_интерфейса.jаvа.

Подразумевается, что каждый интерфейс имеет модификатор реализации abstract, который не указывается при объявлении.

2.Имя интерфейса

Формируются по тем же правилам, которые приняты для имен класса. Рекомендуется имя любого интерфейса, как и класса, начинать с прописной буквы!

3.Спецификация суперинтерфейсов

Суперинтерфейсы указываются ключевым словом extends.

Производный интерфейс не должен содержать описания реализаций не только собственных методов, но и методов суперинтерфейсов.

Любой класс, реализующий производный интерфейс, должен определить тела всех методов, объявленных как в данном производном интерфейсе, так и в суперинтерфейсе(ах).

Тело интерфейса заключено в ,- и может включать только объявления методов и объявления констант (static final полей).

Объявления констант

Каждая переменная (поле) интерфейса по умолчанию считается переменной с модификаторами public, static и final. Эти модификаторы не обязательно указывать при объявлении, однако на практике полезно указывать их явно в качестве постоянного напоминания о статусе поля

(открытая статическая константа) себе и другим программистам.

Инициализация констант выполняется при объявлении.

Поскольку константы являются открытыми, их можно использовать в любых классах, реализующих данный интерфейс. Если интерфейс объявлен как public, константы доступны любому классу, независимо от пакета.

Обращение к константе: Имя_интерфейса.Имя_константы

Объявления методов

Объявление метода, после которого ставится знак ";" , имеет вид:

[public] [abstract+ тип_возвращаемого_значения имя_метода (*список параметров+) [throws список исключений, бросаемых из метода+;

По умолчанию все методы в интерфейсах считаются открытыми методами, вне зависимости от того, присутствует или нет спецификатор доступа public.

Аналогично все методы в интерфейсах считаются абстрактными, независимо от присутствия или отсутствия модификатора abstract.

Запрещается использование других модификаторов.

Реализация интерфейса

18

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]