Herança de classe interna

Alguém poderia me explicar por que é possível fazer extends de classes internas?

fiz este teste e é perfeitamente possível.

[code]public class ContemClasseInterna {

static abstract class Interna{
	
	abstract void imprimeNome();
	
	void imprimeSobrenome(String sobrenome){
		
		System.out.println("Sobrenome = "+ sobrenome);
	}
}	

}

public class ExtendeClasseInterna extends ContemClasseInterna.Interna{

@Override
void imprimeNome() {
	System.out.println("Nome = Edilson");
	
}

public static void main(String[] args) {
	new ExtendeClasseInterna();
}

public ExtendeClasseInterna() {
	imprimeNome();
	imprimeSobrenome("Almeida");
}

}

[/code]

quando executo a ExtendeClasseInterna tenho a saida :

Nome = Edilson
Sobrenome = Almeida

Obrigado desde já.

Simplesmente porque classe interna é uma classe!

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.

[]'s

Vc poderia me explicar porque acha que não deveria ser possível fazer extends de classes internas?

Na realidade gostaria de saber qual o sentido de faze-lo;
Não estou conseguindo enxergar isso, o “sentido” se alguem puder me esclarecer eu agradeço.

Pelo mesmo motivo que voce faz herança em classes voce faz em inner classes. OO.

Fala Edilson… tá estudando hein muleke.

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.

É nóis mano, rumo a certification!