Java. Урок 21. Наследование

Уроки для начинающих   24 Январь 2013  Автор статьи:  

В данном уроке рассмотрим одну из основных составляющих объектно-ориентированного программирования. Наследование — это отношение между классами, при котором один класс расширяет возможности другого. Таким образом он перенимает все возможности класса от которого наследуется и добавляет свои. Например, расширим класс пользователей до класса студент. Студенты, кроме того, чтобы иметь возраст, имя и фамилию будут также учиться в какой — то группе, а также могут отвечать на вопрос учатся ли они в заданной группе. Очевидно, что в программе должен содержаться класс User:

1
2
3
4
5
6
7
8
9
10
11
12
public class User {
    int age;//поле
    String firstName;//поле
    String lastName;//поле

    public User(int age, String firstName, String lastName) {
        this.age = age;
        this.firstName = firstName;
        this.lastName = lastName;
    }

}

Теперь создаем отдельный класс Student:

1
2
3
4
5
6
public class Student extends User{
    int group;
    boolean isMyGroup(int g){
        return g==group;
    }
}

Ключевое слово extends как раз и показывает то, что мы наследуемся от класса User. Но после написания такого кода, мы видим, что среда подчеркивает определение класса красным. Наводим на подчеркнутую красным строчку (тут важно правильно навести, сразу может и не получиться) и у нас появляется красная лампочка:
подсказка
При нажатие на нее среда предлагает варианты по устранению ошибки. Это очень круто, среда сама нам исправляет ошибки, достаточно просто выбрать из списка возможных действий. Так как intellij idea предлагает нам только только один вариант решение проблемы, то выбираем его:

1
2
3
4
5
6
7
8
9
10
11
public class Student extends User{
    int group;

    public Student(int age, String firstName, String lastName) {
        super(age, firstName, lastName);
    }

    boolean isMyGroup(int g){
        return g==group;
    }
}

Так какую ошибку нашла и исправила среда? Дело в том, что мы опять не создали явно конструктор, а как известно, Java сама умеет добавлять только конструктор по умолчанию, который нельзя создать в данном случае, так как класс User не содержит его.
IDE воспользовалась тем, что у нас есть конструктор от трех параметров и предложила нам создать аналогичный, для того, чтобы внутри него вызвать аналогичный конструктор класса User c помощью ключевого слова super.
Подправим чуть — чуть этот конструктор, добавим в него номер группы:

1
2
3
4
5
6
7
8
9
10
11
12
public class Student extends User{
    int group;

    public Student(int age, String firstName, String lastName, int group) {
        super(age, firstName, lastName);
        this.group = group;
    }

    boolean isMyGroup(int g){
        return g==group;
    }
}

Еще раз рассмотрим как происходит наследование, с точки зрения создания объекта:

1
Student student = new Student(18, "Alex", "Finch", 221);

Сначала открывается конструктор класса Student, после этого вызывается конструктор класса User, а затем выполняются оставшиеся операции в конструкторе Student. Такая последовательность действий вполне логична и позволяет создавать более сложные объекты на основе более простых.
Каждый класс может наследоваться только от одного класса.

  • Glip

    Ссылка внизу на следущий урок битая:
    http://cybern.ru/java-access-%20modifiers.html

    • http://cybern.ru/ lordrp

      Спасибо, исправим.

  • Медвед Кулибяка

    [code]
    public class Student extends User{
    int group;
    boolean isMyGroup(int g){
    return g==group;
    }
    }
    [/code]
    Забыли this в group

Научиться программировать

  • на Delphi

  • на Java

  • на C++