Урок 10: Абстрактные классы и интерфейсы
В этом уроке мы рассмотрим абстрактные классы и интерфейсы в Java, которые позволяют создавать более гибкую и расширяемую архитектуру приложений.
Абстрактные классы
Абстрактный класс — это класс, который не может быть создан напрямую и предназначен для наследования. Абстрактные классы могут содержать как абстрактные методы (без реализации), так и методы с реализацией. Пример:
abstract class Animal {
abstract void makeSound();
void sleep() {
System.out.println("Животное спит");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Собака лает");
}
}
public class AbstractClassExample {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.makeSound(); // Выведет: Собака лает
myDog.sleep(); // Выведет: Животное спит
}
}
Результат выполнения
Собака лает
Животное спит
Интерфейсы
Интерфейс — это полностью абстрактный класс, который содержит только абстрактные методы. Классы могут реализовывать несколько интерфейсов, что позволяет создавать более гибкие и модульные приложения. Пример:
interface Animal {
void makeSound();
}
interface Movable {
void move();
}
class Cat implements Animal, Movable {
@Override
public void makeSound() {
System.out.println("Кошка мяукает");
}
@Override
public void move() {
System.out.println("Кошка двигается");
}
}
public class InterfaceExample {
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.makeSound(); // Выведет: Кошка мяукает
myCat.move(); // Выведет: Кошка двигается
}
}
Результат выполнения
Кошка мяукает
Кошка двигается
Упражнения
Упражнение 1: Абстрактный класс транспортного средства
Создайте абстрактный класс Vehicle
с абстрактным методом move
и методом stop
, который выводит "Транспортное средство остановилось". Создайте подкласс Bicycle
, который реализует метод move
и выводит "Велосипед едет". Создайте объект класса Bicycle
и вызовите оба метода.
Решение:
abstract class Vehicle {
abstract void move();
void stop() {
System.out.println("Транспортное средство остановилось");
}
}
class Bicycle extends Vehicle {
@Override
void move() {
System.out.println("Велосипед едет");
}
}
public class VehicleTest {
public static void main(String[] args) {
Bicycle myBike = new Bicycle();
myBike.move(); // Выведет: Велосипед едет
myBike.stop(); // Выведет: Транспортное средство остановилось
}
}
Объяснение: Мы создали абстрактный класс Vehicle
с абстрактным методом move
и методом stop
. В подклассе Bicycle
мы реализовали метод move
. Затем создали объект myBike
и вызвали оба метода.
Упражнение 2: Интерфейс для домашних животных
Создайте интерфейс Pet
с методами play
и feed
. Создайте класс Dog
, который реализует интерфейс Pet
, и методы play
и feed
выводят "Собака играет" и "Собака ест" соответственно. Создайте объект класса Dog
и вызовите оба метода.
Решение:
interface Pet {
void play();
void feed();
}
class Dog implements Pet {
@Override
public void play() {
System.out.println("Собака играет");
}
@Override
public void feed() {
System.out.println("Собака ест");
}
}
public class PetTest {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.play(); // Выведет: Собака играет
myDog.feed(); // Выведет: Собака ест
}
}
Объяснение: Мы создали интерфейс Pet
с методами play
и feed
. В классе Dog
мы реализовали эти методы. Затем создали объект myDog
и вызвали оба метода.