Não é possível acessar a classe interna protegida enquanto herda
Lendo através de "Thinking in Java" eu fiquei no ex: 6 do capítulo Inner Classes.
Exercício 6: (2) Crie uma interface com pelo menos um método, em seu próprio pacote. Crie uma turma em um pacote separado. Adicione uma classe interna protegida que implemente a interface. Em um terceiro pacote, herde da sua classe e, dentro de um método, retorne um objeto da classe interna protegida, fazendo um upcast para a interface durante o retorno.
Este é o meu código:
IOne.javainterface
package intfpack;
public interface IOne{
void f();
}
COne.javaClasse com classe interna protegida que implementa a interface
package classpack;
import intfpack.*;
public class COne{
protected class Inner implements IOne{
public void f(){System.out.println("Inner class of COne");}
}
}
CTwo.javaHerança de classe com classe interna protegida
package thirdpack;
import classpack.*;
import intfpack.*;
public class CTwo extends COne{
public IOne getInner(){
IOne io = new Inner();
return io;
}
public static void main(String[] args){
CTwo ct = new CTwo();
ct.getInner();
}
}
Copmiler diz em seguida:
javac CTwo.java
CTwo.java:9: Inner() has protected access in classpack.COne.Inner
IOne io = new Inner();
^
1 error
Mas o livro diz que eu posso acessar classes internas protegidas na classe derivada. Onde está o erro?