[RESOLVIDO] Classe Interna

6 respostas
ECO2004

Eu tenho uma outra dúvida…

package com.wilson.classeinterna;

import com.wilson.classeinterna.ClasseExterna_ex3.ClasseInterna;

public class ClasseExterna_ex3 
{
	int var = 6;
	
	protected void ChamaFuncaoInterna()
	{
		ClasseInterna i = new ClasseInterna();
		i.f();
	}
	
	protected class ClasseInterna
	{
		protected void f()
		{
			System.out.println(var);
		}
	}

	public static void main(String []args)
	{
		ClasseExterna_ex3 e = new ClasseExterna_ex3();
		e.ChamaFuncaoInterna();
		
	}
}

O código acima funciona, mas não sei por que não poderia ser assim:

package com.wilson.classeinterna;

import com.wilson.classeinterna.ClasseExterna_ex3.ClasseInterna;

public class ClasseExterna_ex3 
{
	int var = 6;
	
	protected class ClasseInterna
	{
		protected void f()
		{
			System.out.println(var);
		}
	}

	public static void main(String []args)
	{
		ClasseInterna i = new ClasseInterna();
		i.f();
		
	}
}

6 Respostas

drsmachado

ClasseInterna i = new ClasseInterna();

Não roda.
Apenas se for chamada a partir de uma instância da classe externa

ClasseExterna_ex3 c = new ClasseExterna_ex3();
ClasseInterna i = c.new ClasseInterna();
ECO2004

drsmachado:
ClasseInterna i = new ClasseInterna();

Não roda.
Apenas se for chamada a partir de uma instância da classe externa

ClasseExterna_ex3 c = new ClasseExterna_ex3(); ClasseInterna i = c.new ClasseInterna();

E ae, amigo!

Na verdade, eu sei que, quando estou fora da classe externa, para acessar uma classe interna, tem que ser através da classe externa, como você expôs.
Mas eu estou dentro da classe externa. A main está no escopo da classe ClasseExterna_ex3.

Eu não entendo o porquê de não dar certo!
Você sabe?

drsmachado

Por que a classe interna existe apenas no escopo da externa.

ECO2004

Então, que nem eu disse…eu estou no escopo da classe externa. A main está dentro da classe externa.
Ouvi uma vez que tinha relação com “a minha classe interna não é estática”. Não entendi, por isso postei o problema.

discorpio

Bom dia a todos

Métodos estáticos, (static) apesarem de estarem no escopo da classe externa, eles não são membros da instância de classes, o mesmo acontece com as variáveis que são declaradas como estáticas.

Na linguagem Java, nenhum método pode ser declarado fora do escopo de classes, porém na linguagem Object Pascal do Delphi isto é permitido, pois métodos estáticos não precisam de instâncias para serem alocados em memória.

ECO2004

discorpio:
Bom dia a todos

Métodos estáticos, (static) apesarem de estarem no escopo da classe externa, eles não são membros da instância de classes, o mesmo acontece com as variáveis que são declaradas como estáticas.

Na linguagem Java, nenhum método pode ser declarado fora do escopo de classes, porém na linguagem Object Pascal do Delphi isto é permitido, pois métodos estáticos não precisam de instâncias para serem alocados em memória.

Entendi…

Obrigado!!!

Criado 16 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 6
Participantes 3