503.65K
Категория: ПрограммированиеПрограммирование

Наследование и полиморфизм. Внутренние, анонимные классы

1.

Курс «Программирование на Java» - Наследование.
Полиморфизм. Внутренние и анонимные классы

2.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Рассматриваемые вопросы
• Принципы ООП
• Абстрактный класс
• Интерфейс
• Переопределение и перегрузка методов
• super и this

3.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Принципы ООП
Абстракция - отделение концепции от ее реализации
Полиморфизм - реализация одной и той же задачи разными способами
Наследование - способность объекта базироваться на другом объекте
Инкапсуляция - размещение одного объекта или класса внутри другого для разграничения доступа к ним

4.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Инкапсуляция
Инкапсуляция это свойство системы, позволяющее объединить данные и методы, а так же скрыть детали
реализации от пользователя
public class Car {
private String carBrand;
private String color;
// чтение
public String getCarBrand() { return carBrand; }
// запись
public void setCarBrand(String carBrand) { this.carBrand = carBrand; }
// чтение
public String getColor() { return color; }
// запись
public void setColor(String color) { this.color = color; }
}

5.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Класс по стандарту JavaBean
Конструктор без параметров, с модификатором доступа public
Свойства класса должны быть только доступны через get, set и другие методы, так называемые методы доступа
Класс должен быть сериализуем - implements java.io.Serializable
Класс должен иметь предопределенные методы equals(), hashCode() и toString()

6.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Интерфейс
Интерфейс - конструкция языка программирования Java, в рамках которой могут описываться абстрактные
методы, default методы и константы
public interface Movable {
//константа
int DEFAULT_DISTANCE = 100;
//абстрактный метод
void move(int distance);
// default метод
default void move() {
move(DEFAULT_DISTANCE);
}
}

7.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Оператор implements
Оператор implements - это дополнение к определению класса, реализующего некоторый интерфейс
public class Drone implements Movable {
@Override
public void move(int distance) {
System.out.println("Moving ..." + distance);
}
}

8.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Создание объектов
Нельзя создать объект интерфейсного класса, но можно получить ссылку на интерфейс у объекта, который его
реализовал
public static void main(String[] args) {
}
Movable movable = new Movable();
// нельзя
Movable car = new Car();
// можно

9.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Default метод в интерфейсе
Нельзя создать объект интерфейсного класса, но можно получить ссылку на интерфейс у объекта, который его
реализовал
public interface Movable {
void move(String nextStopName);
default void beforeMove() { System.out.println("Prepare to move"); }
}
public class Bus implements Movable {
@Override
public void move(String nextStopName) {
System.out.println("Bus is moving to next stop - " + nextStopName);
}
public static void main(String[] args) {
final Bus bus = new Bus();
bus.beforeMove();
bus.move("Railway Station");
}
}

10.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Абстрактный класс
Абстрактный класс - класс, объекты которого нельзя создать. Абстрактный класс может включать, а может не
включать абстрактные методы
public abstract class Car {
private String carBrand;
public abstract void move();
public String getCarBrand() {
return carBrand;
}
}

11.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Наследование
Наследование - свойство системы, позволяющее описать новый класс на основе уже существующего с частично
или полностью заимствующей функциональностью

12.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Наследование
Для указания на класс “родителя” (суперкласс) используется ключевое слово extends в классе “ребенка”
(подкласс - subclass)
public abstract class Car { /* ... */ }
public class ShuttleBus extends Car { /* ... */ }
public class Truck extends Car { /* ... */ }

13.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Наследование
Подкласс должен иметь свою реализацию абстрактного метода суперкласс
public abstract class Car {
public abstract void move();
}
public class Truck extends Car {
@Override
public void move() {
System.out.println("Truck is moving to target");
}
}
public class Main {
public static void main(String[] args) {
Car truck = new Truck();
truck.move();
}
}

14.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Полиморфизм
Полиморфизм - свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и
внутренней структуре объекта
В Java полиморфизм можно реализовать через:
• наследование
• абстрактные классы
• интерфейсы
Достоинства:
• позволяет объединять объекты с общим типом или поведением в одну группу - массив или коллекцию
• гибкость при создании новых типов
• позволяет подменять реализации объектов. На этом основано тестирование
• Обеспечивает расширяемость программы

15.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Перегрузка методов (Overload)
Java разрешает определение внутри одного класса двух или более методов с одним именем, если только
объявления их параметров различны. В этом случае методы называют перегруженными (overloaded), а процесс
— перегрузкой методов.
Перегрузка методов — один из способов поддержки полиморфизма в Java.
• Количество аргументов
• Тип аргументов.
• Последовательность типов аргументов в методе
• Одинаковое название метода

16.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Перегрузка методов (Overload)
Пример перегрузки метода
public class OverloadExample {
public void test(int a) {
System.out.println("a = " + a);
}
public void test(double a) {
System.out.println("a = " + a);
}
public void test(long a) {
System.out.println("a = " + a);
}
}

17.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Переопределение методов (Override)
Метод имеет то же имя, что и родительский класс
Метод имеет те же параметры что и родительский класс
Метод возвращает тот же тип значения
Должно быть наследование (inheritance)

18.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Переопределение методов (Override)
Пример переопределения метода
public abstract class Car {
Car truck = new Truck();
public void move() {
truck.move();
System.out.println("Car is moving");
Car shuttleBus = new ShuttleBus();
}
shuttleBus.move();
}
public class Truck extends Car {
@Override
public void move() {
System.out.println("Truck is moving to target");
}
}
public class ShuttleBus extends Car {
@Override
public void move() {
System.out.println("ShuttleBus is moving to bus stop");
}
}

19.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Слово this
Иногда требуется, чтобы метод ссылался на вызвавший его объект. Чтобы это было возможно, в Java
определено ключевое слово this
public class Point {
private int x;
private int y;
public Point() {
//вызов другого конструктора
this(1, 1);
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}

20.

Курс «Программирование на Java» - Наследование. Полиморфизм. Анонимные классы
Слово super
Для вызова методов родительского класс используется ключевое слово super
public class A {
public void doSmth() {
/* ... */
}
}
public class B extends A {
@Override
public void doSmth() {
//вызов метода родительского класса
super.doSmth();
}
}
English     Русский Правила