Демонстрация того, что приватные поля инициализируются для объектов класса-наследника, даже если он не сможет ими воспользоваться (без метода доступа к этим полям).
class Mammal {
public String head = "head";
public String someSound = sounds("ooooo-o");
private String secretSound = sounds("hey-hey");
Mammal() {
System.out.println("Mammal constructor initialized");
}
public String sounds(String anotherSound) {
System.out.println(anotherSound);
return anotherSound;
}
}
class Human extends Mammal {
Human() {
System.out.println("Human constructor initialized");
}
public static void main(String[] args) {
Human kuko = new Human();
//Mammal cow = new Mammal();
}
}
Сначала инициализируются поля объекта с помощью класса-предка, включая приватные. Потом конструктор класса-предка, а потом поля и конструктор класса наследника.
Получается, что объект класса-наследника все-таки получает приватные поля созданные с помощью класса-предка, но только не может ими воспользоваться (без специального метода доступа вроде set/get).
Более того, если изменить метод, через который передается значение в этом примере и установить доступ private:
private String sounds(String anotherSound) {
System.out.println(anotherSound);
return anotherSound;
}
то результат инициализации будет такой-же, как и с доступом publiс.
class Mammal {
public String head = "head";
public String someSound = sounds("ooooo-o");
private String secretSound = sounds("hey-hey");
Mammal() {
System.out.println("Mammal constructor initialized");
}
public String sounds(String anotherSound) {
System.out.println(anotherSound);
return anotherSound;
}
}
class Human extends Mammal {
System.out.println("Human constructor initialized");
}
public static void main(String[] args) {
Human kuko = new Human();
//Mammal cow = new Mammal();
}
}
Сначала инициализируются поля объекта с помощью класса-предка, включая приватные. Потом конструктор класса-предка, а потом поля и конструктор класса наследника.
Получается, что объект класса-наследника все-таки получает приватные поля созданные с помощью класса-предка, но только не может ими воспользоваться (без специального метода доступа вроде set/get).
Более того, если изменить метод, через который передается значение в этом примере и установить доступ private:
private String sounds(String anotherSound) {
System.out.println(anotherSound);
return anotherSound;
}
то результат инициализации будет такой-же, как и с доступом publiс.
Немає коментарів:
Дописати коментар