Основы ООП в Java

НАВИГАЦИЯ ПО СТРАНИЦЕ

Классы и объекты Инкапсуляция Наследование Полиморфизм

1. Классы и объекты:

Класс — это шаблон для создания объектов.

Он определяет состояние (поля) и поведение (методы) объекта.

public class Car {
    // Поля класса
    String brand;
    String model;
    int year;

    // Конструктор класса
    public Car(String brand, String model, int year) {
        this.brand = brand;
        this.model = model;
        this.year = year;
    }

    // Метод для вывода информации о машине
    public void displayInfo() {
        System.out.println("Марка: " + brand);
        System.out.println("Модель: " + model);
        System.out.println("Год выпуска: " + year);
    }
}

Объект — это экземпляр класса.

Он представляет собой конкретный элемент, созданный на основе класса.

public class Main {
    public static void main(String[] args) {
        // Создание объекта класса Car
        Car myCar = new Car("Toyota", "Camry", 2022);

        // Вызов метода объекта
        myCar.displayInfo();
    }
}

2. Инкапсуляция:

Инкапсуляция означает ограничение доступа к состоянию объекта и предоставление методов для взаимодействия с этим состоянием.

public class BankAccount {
    // Приватные поля класса
    private String accountNumber;
    private double balance;

    // Конструктор класса
    public BankAccount(String accountNumber) {
        this.accountNumber = accountNumber;
        this.balance = 0.0;
    }

    // Геттер для получения номера счета
    public String getAccountNumber() {
        return accountNumber;
    }

    // Геттер для получения баланса
    public double getBalance() {
        return balance;
    }

    // Сеттер для установки баланса
    public void setBalance(double balance) {
        this.balance = balance;
    }

    // Метод для внесения средств на счет
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("Операция по внесению средств выполнена успешно.");
        } else {
            System.out.println("Введите сумму больше нуля.");
        }
    }

    // Метод для снятия средств со счета
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("Операция по снятию средств выполнена успешно.");
        } else {
            System.out.println("Недостаточно средств на счете или введена некорректная сумма.");
        }
    }
}

3. Наследование:

Наследование позволяет создавать новый класс на основе существующего. Новый класс, называемый подклассом, может наследовать поля и методы от существующего класса, называемого суперклассом.

public class Animal {
    // Поле суперкласса
    String name;

    // Конструктор суперкласса
    public Animal(String name) {
        this.name = name;
    }

    // Метод суперкласса
    public void makeSound() {
        System.out.println("Some generic sound");
    }
}

// Подкласс, наследующий Animal
public class Dog extends Animal {
    // Дополнительное поле подкласса
    String breed;

    // Конструктор подкласса
    public Dog(String name, String breed) {
        super(name); // Вызов конструктора суперкласса
        this.breed = breed;
    }

    // Переопределение метода суперкласса
    @Override
    public void makeSound() {
        System.out.println("Woof! Woof!");
    }

    // Дополнительный метод подкласса
    public void wagTail() {
        System.out.println("Tail is wagging");
    }

4. Полиморфизм:

Полиморфизм позволяет объектам разных классов использоваться как объекты одного и того же типа. Это достигается через переопределение методов.

public class PolymorphismExample {
    public static void main(String[] args) {
        // Создание объектов разных классов
        Animal cat = new Animal("Whiskers");
        Animal dog = new Dog("Buddy", "Golden Retriever");

        // Вызов метода makeSound для объектов разных классов
        cat.makeSound(); // Output: Some generic sound
        dog.makeSound(); // Output: Woof! Woof!

        // Приведение типов (downcasting) для вызова метода wagTail только для объекта класса Dog
        if (dog instanceof Dog) {
            Dog specificDog = (Dog) dog;
            specificDog.wagTail(); // Output: Tail is wagging
        }
    }
}

Описание кода:

  • Классы и объекты: Пример с классом Car и его использованием в классе Main демонстрирует создание класса, определение полей, конструктора и методов, а также создание и использование объекта этого класса.

  • Инкапсуляция: Пример с классом BankAccount и его использованием в классе BankApplication показывает, как можно использовать инкапсуляцию для скрытия состояния объекта и предоставления методов для взаимодействия.

  • Наследование: Пример с классами Animal и Dog демонстрирует использование наследования, создание подкласса, переопределение метода и использование суперкласса.

  • Полиморфизм: Пример с классом PolymorphismExample показывает, как объекты разных классов могут использоваться как объекты одного и того же типа. Это достигается через переопределение методов и приведение типов.