Sto leggendo Thinking In Java al momento e ho riscontrato un piccolo problema. Sto facendo esercizio 12 dal capitolo 8.Classe interna ed ereditarietà Java
Creare un'interfaccia con almeno un metodo, nel proprio pacchetto. Crea una classe in un> pacchetto separato. Aggiungi una classe interna protetta che implementa l'interfaccia. In un terzo> pacchetto, ereditate dalla vostra classe e, all'interno di un metodo, restituite un oggetto della classe interna protetta, l'upcasting all'interfaccia durante il ritorno.
Così ho creato questi file .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;
}
}
E il mio NetBeans IDE sottolinea
InPr2();
e dice che: InPr2() ha protetto l'accesso a C082.Pr2.InPr2 e sto chiedendo perché. Se non dichiari esplicitamente che il costruttore di InPr2 dovrebbe essere protetto, sarebbe accessibile solo nel pacchetto C082, ma quando erediterò la classe Pr2 non sarà disponibile nella classe Cl, perché InPr2 è protetto? Va tutto bene quando cambio costruttore in pubblico.
possibile duplicato del [Impossibile accedere classe interna protetta mentre ereditando] (http://stackoverflow.com/questions/1487734/cant- è protetto dall'accesso-protetto-interno-classe-while) – Kal