Se ela for estática, é perfeitamente possível extender qualquer classe interna.
Classes internas não estáticas, não tenho certeza, mas acredito que não seja possível, pois nesse caso para a classe interna existir, obrigatoriamente, deve existir um objeto da classe externa.
Achei a sua pergunta muito relativa, porque se nós fossemos analisar a função da palavra extends é estender tudo que uma classe contém, métodos, atributos. Então eu estenderia uma classe interna se eu quisesse usar os métodos e os atributos que existem lá.
Eu posso estender apenas a classe esterna e ainda chamar métodos da classe interna.
Acho que eu estenderia a classe interna só para economizar memória no heap. Pra que eu vou estender uma classe cheia de métodos se o que eu quero é só um método que está na classe interna…
class ContemClasseInterna {
void imprimeNome(String nome) {
System.out.println("Nome 1 = "+ nome);
}
static abstract class Interna {
static void imprimeSobrenome(String sobrenome){
System.out.println("Sobrenome = "+ sobrenome);
}
}
}
public class ExtendeClasseInterna extends ContemClasseInterna {//.Interna {
void imprimeNome(String nome) {
System.out.println("Nome 2 = "+ nome);
}
public static void main(String[] args) {
new ExtendeClasseInterna();
}
public ExtendeClasseInterna() {
imprimeNome("Edilson");
Interna.imprimeSobrenome("Almeida");
}
}
Eu acho que uma pergunta legal seria “Por que fazer uma classe interna?”
Bom, uma classe interna existe para aquela relação de objetos “tem-um” ou “é-um”. A classe externa tem-uma classe interna, ou um objeto. Eu poderia ter criado essa classe interna lá fora e colocado uma instancia dela lá dentro. Mas digamos que eu fui preguisoço, ou o projetista não quer deixar que eu crie arquivos a mais no projeto, então eu crio uma classe interna.