Я сейчас читаю Thinking In Java и столкнулся с одной маленькой проблемой. Я делаю упражнение 12 из главы 8.
Создайте интерфейс хотя бы с одним методом в своем собственном пакете. Создайте класс в отдельном пакете. Добавьте защищенный внутренний класс, который реализует интерфейс. В третьем> пакете, наследуйте от своего класса и, внутри метода, верните объект защищенного> внутреннего класса, передавая данные в интерфейс во время возврата.
Итак, я создал эти файлы .java:
A.java
package c08;
public interface A
{
void one();
}
Pr2.java
package c082;
import c08.*;
public class Pr2
{
protected class InPr2 implements A
{
public void one() {System.out.println("Pr2.InPr2.one");}
protected InPr2() {}
}
}
Ex.java
package c083;
import c082.*;
import c08.*;
class Cl extends Pr2
{
A foo()
{
InPr2 bar=new InPr2();
return bar;
}
}
И моя среда IDE NetBeans подчеркивает
InPr2();
и говорит, что: InPr2 () имеет защищенный доступ в C082.Pr2.InPr2, и мне интересно, почему.
Если бы я не указал явно, что конструктор в InPr2 должен быть защищен, он был бы доступен только в пакете C082, но когда я наследую класс Pr2, не должен ли он быть доступен в классе Cl, потому что InPr2 защищен? Все нормально, когда я меняю конструктор на public.