Estoy leyendo Thinking In Java en este momento y me encontré con un pequeño problema. Estoy haciendo el ejercicio 12 del capítulo 8.Java inner class and inheritance
Cree una interfaz con al menos un método, en su propio paquete. Crea una clase en un> paquete separado. Agregue una clase interna protegida que implemente la interfaz. En un tercer paquete, herede de su clase y, dentro de un método, devuelva un objeto de la clase interna protegida, upcasting a la interfaz durante la devolución.
lo que he creado estos archivos .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;
}
}
Y mi IDE NetBeans subraya
InPr2();
y dice que: InPr2() ha protegido el acceso en C082.Pr2.InPr2 y me pregunto por qué. Si no declarara explícitamente que el constructor en InPr2 debería estar protegido, solo sería accesible en el paquete C082, pero cuando herede la clase Pr2 no debería estar disponible en la clase Cl, porque InPr2 está protegido? Todo está bien cuando cambio de constructor a público.
posible duplicado de [No se puede acceder a la clase interna protegida, mientras que hereda] (http://stackoverflow.com/questions/1487734/cant- access-protected-inner-class-while-inheriting) – Kal