К.-это повторное использование реализации (а не интерфейса класса). Новый класс не обладает интерфейсом использованных классов.
class WaterSource {
private String s;
WaterSource () {//конструктор
System.out.println (“WaterSource ()”);
s = “constructed”; // сконструировали
}
public String toString() {return s;}
}
___________________________________________________________________
public class SprinclerSystem {
private String valve1, valve2;
private WaterSource sourse = new WaterSource ();//инициализация
private int i;
private float f;
public String to String (){
return
“valve1= ” + valve1+
“valve2= ” + valve2+ “\n”
“i = ” + i + “f= ” + f + ” ” +
“source = “+ source;
}
public static void main (String[] args) {
SprinclerSystem sprinclers = new SprinclerSystem ();//к-р по умолчанию
System.out.println (sprinclers);
}
}
Напечатается:
WaterSource ()//инициализация поля sourse перед конструктором –вызван
конструктор WaterSource()
valve1= null valve2= null // метод SprinclerSystem.toString()
i=0 f=0.0 source = constructed
Примитивы инициализируются нулем. Ссылки заполняются null. При вызове метода произойдет исключение (по ссылке null).
Поэтому ссылка должна быть инициализирована:
- в точке определения объекта: А а = new A(5); Эта инициализация будет выполнена перед вызовом конструктора. Поле будет иметь одно и то же значение во всех объектах этого класса;
- в конструкторе данного класса;
- непосредственно перед использованием;
- в блоке инициализации.