- •Основы Java
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Ограниченный шаблон аргумента.
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Некоторые примеры использования обобщений
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Автоматическое определение аргументов типа
- •ООП в Java. Обобщения. Очистка
- •ООП в Java. Ограничения в использовании обобщений
- •ООП в Java. Ограничения в использовании обобщений
- •GUI в Java
- •GUI в Java. AWT
- •GUI в Java. SWING
- •GUI в Java. JavaFX
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Менеджеры компоновки в SWING
- •GUI в Java. Панели фрейма
- •GUI в Java. Создание фрейма (окна) приложения
- •GUI в Java. Создание фрейма (окна) приложения Лекция 5
- •GUI в Java. Создание компонента для публикации «Hallo Java»
- •GUI в Java. Размещение компонента во фрейме
- •GUI в Java. Размещение нескольких компонетов
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Работа со шрифтом и цветом
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
Основы 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;
}
}