Почему конструктор Java должен быть открытым или защищенным, чтобы класс мог быть расширен за пределы его пакета?

Ниже приведен мой исходный код ProtectedConstructor.java :

package protectCon;

public class ProtectedConstructor{
    public int nothing;
    ProtectedConstructor(){
        nothing = 0;
    }
}

И далее - исходный код UsingProtectedCon.java :

package other;

import protectcon.ProtectedConstructor;

public class UsingProtectedCon extends ProtectedConstructor{   //**Line 4**
    public static void main(String... a) {  
    }
}

Когда я компилирую Используя ProtectedCon.java , я получаю сообщение об ошибке в строке 4, показанной выше. В нем говорится, что ProtectedConstructor () не является общедоступным; поэтому недоступен за пределами пакета.

Однако, поскольку мой класс является общедоступным, я не должен иметь возможность расширять его за пределами пакета. В любом случае я не создаю ни одного его экземпляра.

Теперь, если я сделаю конструктор класса ProtectedConstructor как общедоступный или защищенный , то код компилируется без ошибок.

Тогда почему даже конструктор должен быть общедоступным или защищенным , а не просто иметь доступ по умолчанию?

6
задан Fabian Barney 13 December 2011 в 10:43
поделиться