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

Вопрос 5.5

Читайте также:
  1. E. Некорректный вопрос
  2. I. Перечень вопросов и тем для подготовки к экзамену
  3. II. Вопросительное предложение
  4. VII. Вопросник для анализа учителем особенностей индивидуального стиля своей педагогической деятельности (А.К. Маркова)
  5. X. примерный перечень вопросов к итоговой аттестации
  6. Аграрный вопрос
  7. Анализ влияния рекламы на продвижение противопростудных средств
  8. Балканский вопрос в начале XXв. Русско-германские отношения
  9. Бланк вопросов
  10. БЛОК № 1 (1 – 10 вопрос)
  11. БЛОК № 2 (11 – 20 вопрос)
  12. Блок № 4 (31 – 40 вопрос)

Какой шаблон подменяет собой сложный объект и контролирует доступ к нему.

1) Adapter;

2) Decorator;

3) Proxy;

4) Bridge.

 
Глава 6

ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ

Интерфейсы

Интерфейсы подобны полностью абстрактным классам, но не являются классами. Ни один из объявленных методов не может быть реализован внутри интерфейса. В языке Java существуют два вида интерфейсов: интерфейсы, определяющие контракт для классов посредством методов, и интерфейсы, реализация которых автоматически (без реализации методов) придает классу определенные свойства. К последним относятся, например, интерфейсы Cloneable и Serializable, отвечающие за клонирование и сохранение объекта в информа­ционном потоке соответственно.

Все объявленные в интерфейсе методы автоматически трактуются как public и abstract, а все поля – как public, static и final, даже если они так не объявлены. Класс может реализовывать любое число интерфейсов, указываемых через запятую после ключевого слова implements, дополняющего определение класса. После этого класс обязан реализовать все методы, полученные им от интерфейсов, или объявить себя абстрактным классом.

На множестве интерфейсов также определена иерархия наследования, но она не имеет отношения к иерархии классов.

Определение интерфейса имеет вид:

[ public ] interface Имя [ extends Имя1, Имя2,…, ИмяN] {

/*реализация интерфейса*/ }

Например:

/* пример # 1: объявление интерфейсов: LineGroup.java, Shape.java */

package chapt06;

 

public interface LineGroup {

// по умолчанию public abstract

double getPerimeter(); // объявление метода

}

package chapt06;

public interface Shape extends LineGroup {

//int id; // ошибка, если нет инициализации

//void method(){} /* ошибка, так как абстрактный метод не может

иметь тела! */

double getSquare(); // объявление метода

}

Для более простой идентификации интерфейсов в большом проекте в сообществе разработчиков действует негласное соглашение о добавлении к имени интерфейса символа ' I ', в соответствии с которым вместо имени Shape можно записать IShape.

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

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

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

Реализация интерфейсов классом может иметь вид:

[доступ] class ИмяКласса implements Имя1, Имя2,…, ИмяN {

/*код класса*/ }

Здесь Имя1, Имя2,…, ИмяN – перечень используемых интерфейсов. Класс, который реализует интерфейс, должен предоставить полную реализацию всех методов, объявленных в интерфейсе. Кроме этого, данный класс может объявлять свои собственные методы. Если класс расширяет интерфейс, но полностью не реализует его методы, то этот класс должен быть объявлен как abstract.

/* пример # 2: реализация интерфейса: Rectangle.java */

package chapt06;

 

public class Rectangle implements Shape {

private double a, b;

 

public Rectangle(double a, double b) {

this. a = a;

this. b = b;

}

//реализация метода из интерфейса

public double getSquare() { //площадь прямоугольника

return a * b;

}

//реализация метода из интерфейса

public double getPerimeter() {

return 2 * (a + b);

}

}

/* пример # 3: реализация интерфейса: Circle.java */

package chapt06;

 

public class Circle implements Shape {

private double r;

 

public Circle(double r) {

this. r = r;

}

public double getSquare() { //площадь круга

return Math.PI * Math.pow(r, 2);

}

public double getPerimeter() {

return 2 * Math.PI * r;

}

}

/* пример # 4: неполная реализация интерфейса: Triangle.java */

package chapt06;

/* метод getSquare() в данном абстрактном классе не реализован */

public abstract class Triangle implements Shape {

private double a, b, c;

 

public Triangle(double a, double b, double c) {

this. a = a;

this. b = b;

this. c = c;

}

public double getPerimeter() {

return a + b + c;

}

}

/* пример # 5: свойства ссылки на интерфейс: Runner.java */

package chapt06;

 

public class Runner {

public static void printFeatures(Shape f) {

System. out. printf("площадь:%.2f периметр: %.2f%n",

f.getSquare(), f.getPerimeter());

}

public static void main(String[] args) {

Rectangle r = new Rectangle(5, 9.95);

Circle c = new Circle(7.01);

printFeatures (r);

printFeatures (c);

}

}

В результате будет выведено:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)