Слайд 1КЛАССЫ. ООП В JAVA. КОНСТРУКТОРЫ. БЛОКИ ИНИЦИАЛИЗАЦИИ.
Слайд 2Пакеты
Определяют пространства имен типов.
Могут быть вложенными.
package com.my;
class A {...}
Полное имя
класса: com.my.A
Слайд 3Использование пакетов
Импортирование пакета
import com.my.A;
A a = new A();
Использование полного имени
типа
com.my.A a = new com.my.A();
Подпакеты не импортируются!
Слайд 4Примеры пакетов
java.lang базовые типы
java.util структуры данных
java.io потоки ввода/вывода
java.sql JDBC
javax.swing GUI
Слайд 5Виды классов по объявлению
class
enum
Слайд 6Виды классов по расположению
Верхнего уровня
Вложенные
Анонимные
Локальные
Внутренние
Элементы классов
Слайд 7Экземпляр класса
Класс - это шаблон
Экземпляр класса - реализация шаблона
new -
оператор создания экземпляра
Слайд 8Что может содержать класс (элементы/члены класса)
Конструкторы
Блоки инициализации
Методы
Поля
Вложенные классы
Слайд 9static элементы класса
Принадлежат классу, но не его экземплярам
class A {
static
int x;
static void m() {...}
static {...}
static class B {...}
}
Слайд 10Конструкторы класса
Предназначены для создания объектов.
class Test {
Test() {...}
}
Test
t = new Test();
Слайд 11Методы класса
Определяют функциональность объектов.
class Test {
void m() {...}
}
Test t =
new Test();
t.m();
Слайд 12Поля класса
Определяют состояние объекта.
class Human {
int age = 30;
}
Human human
= new Human();
System.out.println(human.age);
Слайд 13Блоки инициализации
Инициализируют объект.
class Test {
{...}
}
Слайд 14Классы - элементы классов
Объект может содержать (агрегировать) другие объекты.
class Student
{
class Brain {...}
Brain brain;
}
Слайд 15Наследование
class A extends B {...}
Потомок - всегда частный случай предка.
Наследуются
все элементы класса B.
Потомок может заменить предка в любом контексте.
Слайд 16Инкапсуляция
Ограничение доступа к элементам класса.
Сокрытие деталей внутренней реализации.
Цель: целостность объекта.
Слайд 17Полиморфизм
class Base { void m() {...} }
class A
extends Base { void m() {...} }
class B
extends Base { void m() {...} }
Потомок может переопределить функциональность предка
Base base = new A(); Base base = new B();
base.m(); base.m();
Слайд 18Уровни доступа к элементам класса
private внутри класса
default внутри пакета
protected внутри пакета и потомков
public любой
внешний код
default - по умолчанию
Слайд 19Уровни доступа к классам
Классы верхнего уровня:
public default
Вложенные классы:
public protected default private
Локальные классы:
default
Слайд 20Конструктор
Создает экземпляр класса
Имя совпадает с именем класса
Не может быть наследован
Не
имеет типа возвращаемого результата
Может иметь любой уровень доступа
Слайд 21Конструктор по умолчанию
Конструктор без параметров:
class A { public A(){...} }
Если в классе
не определен ни один конструктор, то компилятор создаст и вставит
в байт код конструктор по умолчанию.
Т.о. любой класс содержит конструктор
Слайд 22Ключевое слово this
Ссылка на экземпляр класса, который ее использует
Способ вызова
одного конструктора из другого
Слайд 23Ключевое слово super
Способ обратится к элементу класса предка
Способ вызова конструктора
класса предка
Слайд 24Вызов конструктора предка из конструктор потомка
Любой конструктор всегда содержит первой
строкой вызов конструктор предка.
public A(int x) {
super(9, "abcd");
}
Если вызов явно
не прописан, то компилятор вставит в байт код вызов super();
Слайд 25Перегрузка методов
class A {
void m() {...}
void m(int x) {...}
}
Конструкторы класса
всегда перегружены.
Слайд 26Перекрытие методов
Позволяет реализовать полиморфизм
class A {
void m() {...}
}
class B extends
A {
void m() {...}
}
Слайд 27Сокрытие статических методов
class A {
static void m() {...}
}
class B extends
A {
static void m() {...}
}
Полиморфизма нет.
Слайд 28Ограничения при перекрытии
Нельзя сужать уровень доступа;
Нельзя расширять множество выбрасываемых проверяемых
исключений;
Тип возвращаемого результата:
для примитивных типов и void: такой же
для ссылочных
должен быть автоматически приводим к типу возвращаемого результата метода предка
Слайд 29Значения полей по умолчанию
примитивные типы числовые ==> 0
boolean ==> false
ссылочные ==>
null
Слайд 30Инициализация полей
При объявлении
В конструкторе
В блоках инициализации
В методах
Слайд 31Ключевое слово final
Четыре контекста:
класс - нельзя наследовать
метод - нельзя перекрыть
поле
- константа
локальная переменная - константа
Слайд 32final поля
Константы. Должны быть определены одним из следующих образом:
1) при
объявлении
2) в конструкторе
3) в блоке инициализации
Если константа статическая, то пишут
в верхнем регистре через подчеркивание:
static final int SOME_CONST = 2;
Слайд 33Локальные константы
void m() {
final int x;
final String s = "ABC";
}
Слайд 34Абстрактные классы
Класс объявленный со спецификатором abstract
Может содержать абстрактные методы (методы
без реализации).
abstract class A {
abstract void m();
}
Слайд 35Свойства абстрактного класса
Нельзя создать экземпляр, но можно объявить переменную данного
типа
Может иметь конструкторы
Может иметь не абстрактные методы
Может не содержать абстрактных
методов
Слайд 36Предназначение абстрактных классов
Определить частичную функциональность, оставив часть методов не реализованными.
При
наследовании абстрактного класса, класс потомок наполняет функциональностью нереализованные методы.
Слайд 37Процесс создания объекта.
A extends B extends
C
При создании объекта: new A()
1) выполняются статические блоки инициализации C,
B, A (если эти классы еще не загружены в JVM);
2) для классов C, B, A последовательно выполняются:
а) блок инициализации
б) конструктор