где список_параметров обозначает параметры, необходимые для нормальной работы конструктора суперкласса. Вызов конструктора super должен быть первым оператором в теле конструктора подкласса. Для того чтобы лучше понять особенности вызова super , рассмотрим вариант класса TwoDShape из следующего примера программы, где определен конструктор, инициализирующий переменные экземпляра width и height: // Добавление конструкторов в класс TwoDShape. class TwoDShape { private double width; private double height; // Параметризированный конструктор объектов класса TwoDShape. TwoDShape(double w, double h) { width = w; height = h; } // Методы доступа к переменным экземпляра width и height. double getWidth { return width; } double getHeight { return height; } void setWidth(double w) { width = w; } void setHeight(double h) { height = h; } void showDim { System.out.println("Width and height are " + width + " and " + height); } } // Подкласс, производный от класса TwoDShape, // для представления треугольников, class Triangle extends TwoDShape { private String style; Triangle(String s, double w, double h) { // Использование оператора super для вызова // конструктора класса TwoDShape. super(w, h); // вызвать конструктор суперкласса style = s; } double area { return getWidth * getHeight / 2; } void showStyle { System.out.println("Triangle is " + style); } } class Shapes4 { public static void main(String args[]) { Triangle tl = new Triangle("isosceles", 4.0, 4.0); Triangle t2 = new Triangle("right", 8.0, 12.0); System.out.println("Info for tl: ") ; tl.showStyle; tl.showDim; System.out.println ("Area is " + tl.areaO); System.out.println; System.out.println("Info for t2: ") ; t2.showStyle; t2.showDim; System.out.println("Area is " + t2.area); } }
В конструкторе Triangle присутствует вызов конструктора super с параметрами w и h. В результате управление получает конструктор TwoDShape , инициализирующий переменные width и height значениями, передаваемыми ему в качестве параметров. Теперь класс Triangle уже не занимается инициализацией элементов суперкласса. Он должен инициализировать только собственную переменную экземпляра style. Конструктору TwoDShape предоставляется возможность построить соответствующий подобъект так, как требуется для данного класса. Более того, в суперклассе TwoDShape можно реализовать функции, о которых не будут знать его подклассы. Благодаря этому код становится более устойчивым к ошибкам.