6 Наследование

1 Наследование

public class Point{

    private double x=0, y=0;            // можно инициализировать поля в конструкторе, можно - здесь

    public Point(double x, double y){...}

    public void print(){...}

}


///////////////////////////////////////////////////////////////////////////////////


public class Point3d extends Point{

    private double z=0;                // x и y у нас уже есть!

    public Point3d(double x, double y, double z){

        super(x, y);                    // вызов конструктора из суперкласса!

        инициализировать z

    }

    public void print(){...}            // переопределение!

}

//////////////////////////////////////////////////////////////////////////////////

..в main():

    Point p1 = new Point(11, 22);
        p1.print();                        // -> (11.0, 22.0)
    Point3d p2 = new Point3d(33, 44, 55);
        p2.print();                        // -> (33.0, 44.0, 55.0)

    // подстановка!
    Point p3 = new Point3d(66, 66, 66);
        p3.print();                        // что будет на экране?

//////////////////////////////////////////////////////////////////////////////////

Выводы

  1. Класс-наследник содержит все то же, что и суперкласс - плюс что-то свое.
  2. Следовательно, объект класса-наследника занимает больше места в памяти.
  3. Два способа "расширения" класса - добавление (полей и методов) и замещение (переопределение, overriding) методов.
  4. Конструкторы вызываются в порядке наследования (super).
  5. Студент является человеком, Point3d является точкой - значит ссылка на Point может ссылаться на объект Point3d! (восходящее преобразование)

2 Д.з.№6


Задание на паре:

Запрограммировать и протестировать классы Point и Point3d (инструкции | тесты).

Подстраницы (1): Point: инструкции
Comments