Инициализация базового класса

Внутри объекта наследника содержится объект базового класса!!!, поэтому в конструктор производного класса автоматически вставляется вызов конструктора базового класса (наследника). Если конструкторов нет, компилятор генерирует конструктор по умолчанию, в котором тоже вызывается конструктор базового класса. Если у базового класса есть конструкторы только с аргументами, их нужно вызывать явно: super (…)

сlass Art {Art (){System.out.println (’’Art Constructor’’);}}

class Drawing extends Art {

Drawing (){System.out.println (’’Drawing Constructor’’);

}

public static void main (String [] args){

Drawing x = new Drawing ();

}

)

Напечатается: Art Constructor

Drawing Constructor

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

Если конструкторы базового класса с аргументами

сlass Game {

Game (int i) {}

}

сlass BoargGame extends Game {

BoardGame (int i) {//конструктора по умолчанию в Game нет! Поэтому

super (i); //должен быть первой командой в конструкторе

}

}

public class Chess extends BoardGame{

Chess {

super (11);

}

public static void main (String []args){

Chess x= new Chess();

}

}

При загрузке загружается x.class, потом его базовый класс и т.д. Затем производится static инициализация: базовый и производные. Затем примитивные поля объектов – по умолчанию, а ссылки = null. Затем конструкторы базового класса. Затем инициализируются переменные. Затем -конструктор.

Делегирование

Вид композиции. Объект класса включается в новый класс и его методы делаются доступными.

Модуль управления:

public class SpaceShipControls{

void up (int velocity){}

void down (int velocity) {}

}

Корабль не есть наследник модуля управления (не проходит проверка is-а). Поэтому

public class SpaceShip{

private string name;

private SpaceShipControls controls = new SpaceShipControls();

public SpaceShip (String name){

this.name=name;

{

public void up (int velocity) {

controls.up (velocity);

}

public void down (int velocity) {

controls.down (int velocity)

}

...

main:

SpaceShip ship=new SpaceShip (“NASA”);

ship.up(100);

можем реализовать не все методы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: