Pages

29.05.13

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

Демонстрация того, что приватные поля инициализируются для объектов класса-наследника, даже если он не сможет ими воспользоваться (без метода доступа к этим полям).

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с.

Немає коментарів:

Дописати коментар