Herança de classe interna

5 respostas
edilson_x

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

fiz este teste e é perfeitamente possível.

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");
	}
}

quando executo a ExtendeClasseInterna tenho a saida :

Nome = Edilson
Sobrenome = Almeida

Obrigado desde já.

5 Respostas

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

rodpuc

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

edilson_x

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.

Marky.Vasconcelos

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

lipe82

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!

Criado 3 de abril de 2009
Ultima resposta 7 de abr. de 2009
Respostas 5
Participantes 5