Зарегистрируйтесь, чтобы продолжить обучение

Наследование Java: Основы ООП

От абстрактного класса невозможно создать объект. В абстрактном классе могут быть абстрактные методы - методы, которые не имеют реализации. Такие методы должны быть реализованы в классе-наследнике:

// Animal.java
public abstract class Animal {
    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public void go() {
        System.out.println("I wake up.");
    }

    private void die() {
        System.out.println("ANIMAL: I die.");
    }

    void born() {
        System.out.println("ANIMAL: I have been born.");
    }

    public abstract void eat();
}

Класс Dog наследуется от Animal. В него добавляется метод bite(), уникальный для собаки.

Методы go() и eat() переопределены, для каждого класса-наследника может быть своя реализация.

Невозможно переопределить методы с видимостью private или без определённого (default) типа видимости.

// Dog.java
public final class Dog extends Animal {
    public void bite() {
        System.out.println("DOG: I bite.");
    }

    @Override
    public void go() {
        super.go(); // Вызов метода из базового класса
        System.out.println("Dog: I go.");
    }

    @Override
    public void eat() {
        System.out.println("DOG: I eat.");
    }
}

Класс Frog наследуется от Animal. В него добавляется метод jump(), уникальный для лягушки.

// Frog.java
public class Frog extends Animal {

    public void jump() {
        System.out.println("FROG: I jump.");
    }

    @Override
    public void go() {
        super.go(); // Вызов метода из базового класса
        System.out.println("FROG: I go.");
    }

    @Override
    public void eat() {
        System.out.println("FROG: I eat.");
    }
}
// Example.java
public class Example {
    public static void main(String[] args) {
        // problem
//        Animal frog = new Frog();
//        frog.setX(1);
//        frog.setY(1);
//        frog.go();
//        frog.eat();

// Вызывать метод jump у объекта типа Animal не получится, такого метода у родительского класса нет
//        frog.jump();

//        Animal dog = new Dog();
//        dog.setX(3);
//        dog.setY(2);
//        dog.go();
//        dog.eat();

// Вызывать метод bite у объекта типа Animal не получится
//        dog.bite();

        List<Animal> animals = List.of(new Frog(), new Dog());
        for (Animal animal : animals) {
            animal.go();
        }

        for (Animal animal: animals) {
            animal.eat();
        }

        // Dog and Frog extends Animal

        // super

        // abstract
    }
}

Дополнительные материалы

  1. Наследование - документация Oracle

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу