Top.Mail.Ru

Перечень уроков по Java

16. Наследование

Наследование - создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных  и методы базового класса автоматически становятся элементами данных нового класса.

Пусть имеется класс A. Назовем его базовым

public class A {

//поля

  int a;

  int b;

//конструктор

  public  A(int A, int B)

   {

       a=A; b=B;

   }

//метод

public void methodA(){

  System.out.println("a="+a+ "b="+b);

  }

}

На базе класса A построим дочерний или производный класс B. Для этого в определении класса B после имени класса записывается ключевое слово extends и затем класс, который B наследует:

public class B  extends A{

  

   int c;

   int d;

   public B(int A, int B, int C, int D)

    {

        super(A,B);

        c=C;

        d=D;

    }

public void methodB() {

        //вызов метода родительского класса

        super.methodA();

        System.out.println("c="+c+ "d="+d);

        //доступ к родительскому полю

        super.a= c;

        

      }

}

Термин "наследование" означает, что класс B обладает всеми свойствами класса A, он их унаследовал.  Объект класса B кроме собственных данных и методов  будет иметь все данные и методы базового класса A.  В Java класс может иметь только одного родителя.  Множественное наследование не допускается. 

При записи конструктора класса B используется ключевое слово super. Использование слова super() в конструкторе (обратите внимание на круглые скобки) означает вызов конструктора базового класса. Вызов конструктора родителя записывается первым оператором и затем уже записываются остальной части тела конструктора производного класса.

Используя ключевое слово super можно вызвать метод родительского класса

        //вызов метода родительского класса
     super.methodA();

   

или получить доступ к полю родительского класса.

        //доступ к родительскому полю
      super.a= c;

  

 При этом родительский метод и соответственно поле должны иметь уровень доступа по умолчанию (пакетный) или public.

 

Формат наследования:

 <мд> class <имя класса> extends  <имя родителя> {

поля;

конструкторы

методы классов

методы объекта

 }

В Java класс может иметь только одного родителя.  Множественное наследование не допускается. 

Правила наследование конструкторов

При создании конструктора производного класса:

  • сначала вызывается конструктор базового класса, а затем вызывается конструктор текущего класса;
  • для вызова конструктора базового класса используется ключевое слово super

suреr(список параметров);

  • если базовый класс имеет несколько конструкторов, то необходимый указывается при определении конструктора производного класса;
  • если конструктор базового класса имеет параметры, то они включаются в список параметров производного класса.
  • Если явной вызов конструтора родителя отсутствует, компилятор автоматически помещает в первой строке конструктора обращение к методу super().
  • Оператор super() всеrда должен быть первым выполняемым оператором  внутри конструктора дочернего класса.
  • Поля родительского класса могут быть private.

Используя ключевое слово super можно вызвать метод или поле родительского класса, если оно имеет  пакетный уровень доступа или паблик public.