Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Лекция 5.ppt
Скачиваний:
78
Добавлен:
15.06.2021
Размер:
660.99 Кб
Скачать

Основы Java

МИЭТ, 2016

Лекция 5.

1.ООП в Java (продолжение) 2.Графический интерфейс в Java

ООП в Java. Вложенные и внутренние классы

Лекция 5

Вложенным называется класс, который определяется в другом классе.

ООП в Java. Вложенные и внутренние классы

Лекция 5

Вложенный класс InnerMax не будет доступен при вызове класса в который он

вложен не смотря на модификатор public. Такой вложенный класс называется

внутренним.

ООП в Java. Вложенные и внутренние классы

Лекция 5

Если добавить к классу InnerMax модификатор static, то класс становится видимым, подобно статическому методу или переменной и могут быть созданы

объекты этого класса.

Такие вложенные классы будут внешними.

ООП в Java. Вложенные и внутренние классы

Лекция 5

Проверим, что происходит при наследовании классов, содержащих вложенные классы: внешние и внутренние. Для этого создадим наследник класса InClass и переопределим в нем метод max.

ООП в Java. Вложенные и внутренние классы

Лекция 5

Как видно, если вложенный класс был внешним, то его поведение при вызове в составе объекта и напрямую — различается. В составе объекта переопределение метода вложенного класса не сработало, а при прямом вызове, как объекта статического класса и его метода — сработало.

ООП в Java. Вложенные и внутренние классы

Лекция 5

Если вложенный класс был внутренним, то переопределение метода max при наследовании класса в который он был вложен не вступает в силу.

Таким образом, переопределение при наследовании возможно только для статических вложенных классов, вызываемых напрямую.

Ситуацию не меняет даже прямое указание наследования вида: public class InnerMax extends main.InClass.InnerMax

Следует отметить возможность для вложенных классов наследовать от других классов

ООП в Java. Обобщения

Лекция 5

Обобщения применяются для того, чтобы использовать одни и те-же алгоритмы для разных типов данных. Для этого конкретный тип заменяется специальной обобщающей конструкцией, имеющей название - параметризованный тип.

Определение обобщенного класса осуществляется конструкцией: class ИмяКласса <ИмяПараметраТипа>

public class InClass<T> { private T T[];

InClass(T t[]) { this.T = t;

}

//Переопредилим метод toString public String toString() {

String Result = ""; for(T temp : this.T){

Result += temp.toString()+", ";

}

return Result;

}

ООП в Java. Обобщения

Лекция 5

Результат применения вызова с обобщенным типом

public class test {

public static void main(String args[]) {

Integer t[] = { 3, 4, 5, 2, 1, 7, -3, -2, 19};

Float f[] = { 3.09F, 4.67F, 5.89F};

//Простые типы: int, float и т.д.

//в обобщениях использовать нельзя

InClass <Integer> getI = new InClass(t); System.out.println(getI.toString());

//Вернет 3, 4, 5, 2, 1, 7, -3, -2, 19,

InClass <Float> getF = new InClass(f); System.out.println(getF.toString());

//Вернет 3.09, 4.67, 5.89,

}

}

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

ООП в Java. Обобщения. Ограниченные типы

Лекция 5

Для того, чтобы воспользоваться операциями допустимыми с определенной группой

типов следует воспользоваться ограничением обобщенного типа. Ограничив типы данных классом Number мы можем быть уверены, что получаемые значения — числа и

поэтому их можно складывать и иметь другие методы, определенные для класса

Number.

public class InClass<T extends Number> { private T Mass[];

InClass(T t[]) { this.Mass = t;

}

//Метод подсчитывает сумму значений элементов массива Mass //Возвращаемый тип определен как Double,

//чтобы иметь максимальный диапазон значений public Double getSumm() {

Double s = 0D;

for(int i=0; i<Mass.length; i++) { s += Mass[i].doubleValue();

//Метод doubleValue определен в классе Number

}

return s;

}

}

Соседние файлы в папке Заочники 2020-2021