Ответ 1
Нет выхода. Вы должны создать супердоступный конструктор (protected
, public
или по умолчанию), чтобы иметь возможность расширять test
.
Такая нотация обычно используется в классах или синглетах утилит, где вы не хотите, чтобы пользователь создавал себе экземпляр вашего класса, либо расширив его, либо инициировав подкласс, либо просто вызвав конструктор вашего класс.
Если у вас есть class
только с конструкторами private
, вы также можете изменить class
на final
, потому что он не может быть вообще расшифрован.
Другое решение будет иметь метод в test
, который создает экземпляры test
и делегирует каждый вызов метода из One
в экземпляр test
. Таким образом, вам не нужно расширять test
.
class Test {
private Test() {
System.out.println("test");
}
public static Test getInstance(){
return new Test();
}
public void methodA(){
//Some kind of implementation
}
}
public class One {
private final Test test;
One() {
System.out.println("One");
test = Test.getInstance();
}
public void methodA(){
test.methodA();
}
public static void main(String args[]) {
new One();
}
}