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();
}
}
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();
[quote=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();
[/quote]
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?
Por que a classe interna existe apenas no escopo da externa.
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.
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.
[quote=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.
[/quote]
Entendi…
Obrigado!!!