Вопрос о конструкторе Java

72
13 февраля 2018, 07:54

Есть package p1, в котором расположены 3 файла:

Demo.java:

package p1;
public class Demo 
{
    public static void main(String [] args)
    {
        Protection ob1 = new Protection();
        Derived ob2 = new Derived();
    }
}

Protection.java:

package p1;
public class Protection 
{
    int n = 1;
    private int n_pri = 2;
    protected int n_pro = 3;
    public int n_pub = 4;
    public Protection()
    {
        System.out.println("Konstruktor bazovoo klassa.");
        System.out.println("n = " + n);
        System.out.println("n_pri = " + n_pri);
        System.out.println("n_pro = " + n_pro);
        System.out.println("n_pub = " + n_pub);
    }
}

Derived.java:

package p1;
public class Derived extends Protection
{
    Derived()
    {
        System.out.println(12);
    }
}

Вывод:

Konstruktor bazovoo klassa.

n = 1

n_pri = 2

n_pro = 3

n_pub = 4

Konstruktor bazovoo klassa.

n = 1

n_pri = 2

n_pro = 3

n_pub = 4

12

Почему срабатывает 2 раза конструктор класса Protection, если я его не вызывал в классе Derived, например, Derived() {super()}; ?

Answer 1

При срабатывании конструктора потомка всегда вызывается конструктор предка, даже если вы не вызываете его явно. Компилятор сам дописывает вот такую строчку за вас:

 Derived()
     {
        super(); // autogenerated
        System.out.println(12);
     }

Причем вызов коструктора супер класса всегда идет первым ! (таковы правила). Если вы попробуете изменить порядок, то компилятор сообщит вам об ошибке.

Answer 2

Потому что он вызывается неявно

READ ALSO
Что собой представляет xddf в Apache POI?

Что собой представляет xddf в Apache POI?

После скачивания и подключения библиотек Apache POI из сайта poiapache

72
VideoView долгая загрузка видео, как обработать

VideoView долгая загрузка видео, как обработать

Есть VideoView, в нем по методу setVideoView(Uriparse("somePathUrlVideo")) загружается видео через интернет, проблема в том, что загрузка очень долгая, несколько секунд,...

60
Почему бесконечно всплывают окна?

Почему бесконечно всплывают окна?

Реализация игры 2048 на javaЕсть 5 классов: Main - служит для запуска приложения

46
открыть google map на текущем положении пользователя

открыть google map на текущем положении пользователя

День добрыйПри запуске карты мое приложение открывает карту мира

67