Урок 9: Наследование и полиморфизм
В этом уроке мы рассмотрим концепции наследования и полиморфизма в Java, которые являются основными принципами объектно-ориентированного программирования (ООП).
Наследование
Наследование позволяет создавать новый класс на основе существующего. Новый класс, называемый подклассом (или наследником), наследует поля и методы базового класса (или родителя). Пример:
class Animal {
void makeSound() {
System.out.println("Животное издает звук");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Собака лает");
}
}
public class InheritanceExample {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.makeSound(); // Выведет: Собака лает
}
}
Результат выполнения
Полиморфизм
Полиморфизм позволяет использовать объект базового класса для обращения к объектам подклассов. Это позволяет писать более общий код. Пример:
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Кошка мяукает");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.makeSound(); // Выведет: Собака лает
myAnimal = new Cat();
myAnimal.makeSound(); // Выведет: Кошка мяукает
}
}
Результат выполнения
Собака лает
Кошка мяукает
Упражнения
Упражнение 1: Наследование и переопределение методов
Создайте базовый класс Vehicle
с методом move
, который выводит "Транспортное средство движется". Затем создайте подкласс Car
, который переопределяет метод move
и выводит "Машина едет". Создайте объект класса Car
и вызовите метод move
.
Решение:
class Vehicle {
void move() {
System.out.println("Транспортное средство движется");
}
}
class Car extends Vehicle {
@Override
void move() {
System.out.println("Машина едет");
}
}
public class VehicleTest {
public static void main(String[] args) {
Car myCar = new Car();
myCar.move(); // Выведет: Машина едет
}
}
Объяснение: Мы создали базовый класс Vehicle
и переопределили его метод move
в классе Car
. Затем создали объект myCar
и вызвали метод move
, который вывел "Машина едет".
Упражнение 2: Полиморфизм и массив объектов
Создайте базовый класс Shape
с методом draw
, который выводит "Рисование фигуры". Создайте подклассы Circle
и Square
, которые переопределяют метод draw
и выводят "Рисование круга" и "Рисование квадрата" соответственно. Создайте массив объектов Shape
и вызовите метод draw
для каждого элемента массива.
Решение:
class Shape {
void draw() {
System.out.println("Рисование фигуры");
}
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("Рисование круга");
}
}
class Square extends Shape {
@Override
void draw() {
System.out.println("Рисование квадрата");
}
}
public class ShapeTest {
public static void main(String[] args) {
Shape[] shapes = {new Circle(), new Square(), new Shape()};
for (Shape shape : shapes) {
shape.draw();
}
}
}
Объяснение: Мы создали базовый класс Shape
и переопределили его метод draw
в классах Circle
и Square
. Затем создали массив объектов Shape
и вызвали метод draw
для каждого элемента массива, что привело к полиморфному поведению.