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

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

  2. 0 коммент.:

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