Por que os métodos de classe interna não podem ser estáticos em Java?
Primeiro let's esclarece algo, as classes internas STATIC podem ter membros estáticos.
A razão pela qual as classes internas não podem ter membros estáticos é porque os membros estáticos são normalmente instanciados quando o programa inicia. Entretanto, uma classe interna depende de ter uma instância de sua classe envolvente para poder criá-la e depois acessá-la's membros. Portanto, a decisão de não ter membros estáticos para uma classe interna faz sentido devido a essa dependência. O membro estático não pode ser acessado até que algo tenha sido criado, ou seja, a instância da classe envolvente, então por que tê-la?
P>Eu também poderia ver isso fazendo sentido, porque se a JVM tem um local especial para membros estáticos, então ela ganhou'não faz muito sentido poluir esse espaço com membros estáticos da classe inner, que não estão disponíveis no namespace global até que uma instância de outra classe exista.
I will leave you with an example of how to access inner class members
- public class Outer {
- public static class StaticInnerClass {
- public static int member = 1337;
- }
- public class InnerClass {
- // public static int member = 1337; // Error
- public int member = 1337;
- }
- public static void main(String args[]) {
- int innerMember = Outer.StaticInnerClass.member; // OK
- // int innerClassMember = Outer.InnerClass.member // Error
- Outer outer = new Outer();
- InnerClass innerclass = outer.new InnerClass();
- int innerClassMember = innerclass.member; // OK
- }
- }
Artigos semelhantes
- Qual é a diferença entre a declaração de classe e a definição de classe em Java?
- Como chamar uma classe de outra classe em Java
- Existe uma boa ferramenta de código aberto para uma rede social interna, que possa ser protegida para que permaneça interna?
- Por que algumas aplicações smartphone são atribuídas à memória interna e não podem ser movidas para um cartão SIM externo?