[Dúvida] Classe Interna

4 respostas
InsaneChess

Prezados, bom dia!
Estou estudando classes Internas, e pelo que li uma classe interna tem acesso a todos os métodos e variáveis declarados em sua classe externa vinculada. Correto?
No exemplo abaixo, estou tentando acessar as variáveis Externas utilizando a classe interna, porém o eclipse acusa erro por falta de declaração.
Alguem pode me informar o que está ocorrendo por favor? Eu comentei as linhas do código que gostaria de saber o motivo de acusar erro.

public class Externa {
	
	int X, Y;
	String Hello;
	
	public Externa(){
		X = 10; Y = 20;
		Hello = "Hello World";
		System.out.println("Um objeto de classe externa esta sendo criado");
	}
	
	void OuterClass(){
		System.out.println("Eu sou a classe Externa");
	}
	
	
	public class Interna{
		
		X = 100;   //[u]Por quê não é possível utilizar a variável X declarada na Classe Externa?[/u]
		public Interna(){
			super();
			System.out.println("Um objeto de classe interna esta sendo criado");
		}
		void InnerClass(){
			System.out.println("Eu sou a classe Interna, dados externos "+X+" e "+Y+".");
		}
	}
	
	
}
public class Principal{

  	 
	public static void main(String[] args){
    	
       Externa Ext = new Externa();
       Externa.Interna Inte = Ext.new Interna();

       Inte.InnerClass();
       Inte.X = 30; //[u]Por quê não é possível utilizar a variável X declarada na Classe Externa?[/u]
       Inte.Y = 50; //[u]Por quê não é possível utilizar a variável Y declarada na Classe Externa?[/u]
    } 
}

4 Respostas

evertonsilvagomesjav

Voce esta tentando acessar sua variavel em nenhum scopo uai, por isso nao vai funcionar.

public class Interna{   
           
        X = 100;   // TIRA ISSO DAQUI
        public Interna(){   
            super();   
//POEM AQUI OU DENTRO DO SEU MÉTODO innerClass()
            System.out.println("Um objeto de classe interna esta sendo criado");   
        }   
        void InnerClass(){   
            
            System.out.println("Eu sou a classe Interna, dados externos "+X+" e "+Y+".");   
        }   
    }
evertonsilvagomesjav

Procure criar nome de métodos com a letra inicial minuscula e as demais iniciais Maiusculas, sao padroes JavaBeans e ajuda a diferenciar classes de metodos.

Procure criar variaveis com os mesmos padroes iniciais minusculas e as demais iniciais Maiusculas, á nao ser que seja uma constante. Quando vc criou uma variavel de referencia com nome maiusculo e do mesmo nome que sua classe, logo achei que vc estava acessando algo estatico.

InsaneChess

Obrigado, irei dar uma pesquisada pela internet e começar a seguir os padrões.
Só que ainda não consigo intender essa parte de escopo.

A classe interna se encontra "dentro da classe externa" sendo assim, tudo que está nela não deveria reconhecer o escopo maior que é a classe externa?
Eu reparei que tenho andado com muita falta de informação sobre coisas assim...

Por exemplo, o primeiro exemplo abaixo não funciona, já o segundo sim...
Como conseguido descobrir, o que só pode ser usado e feito em qualquer parte do corpo da classe fora de um método?
Nesse caso abaixo eu não consegui atribuir o 10, e no da classe Interna, visualizar a variável superior.

[code]public class Principal{

int numero;
numero = 10; //Isso não pode ser feito, acusa erro.

int numero2 = 50;

public static void main(String[] args){

}
}

[code]

evertonsilvagomesjav

O que ocorre, e que vc esta tentando fazer algo que deve ser feito em algum “corpo”, sejam estes métodos, construtores ou blocos de inicialização.

Fora desses citados á cima vc somente declara algo, ou declara e inicializa no exato momento.

Criado 14 de setembro de 2010
Ultima resposta 14 de set. de 2010
Respostas 4
Participantes 2