Ir ao conteúdo
  • Cadastre-se

Java Problema com elementos static apenas quando é private


Posts recomendados

E aí pessoal, tudo bem?

public abstract class Teste {
    public static final Teste IMPLEMENTACAO_1 = new Teste() {
        @Override
        public void funcao() {
            // Non-static method 'falarPrivado()' cannot be referenced from a static context
            falarPrivado();
        }
    };

    public static final Teste IMPLEMENTACAO_2 = new Teste() {
        @Override
        public void funcao() {
            falarPublico();
        }
    };

    public abstract void funcao();

    private String falarPrivado() {
        return "Falando privado";
    }

    public String falarPublico() {
        return "Falando publico";
    }
}

A classe acima está acusando o famoso erro de compilação sobre "um elemento não estático não poder ser referenciado por um estático". Mas analisando as duas funções "falar", vemos que elas possuem exatamente o mesmo código, mudando apenas o modificador de acesso. A questão é que apenas a função privada lança o erro.

 

Alguém poderia me explicar como o modificador de acesso influencia nisso? Tipo, por que só a função privada dá problema? No meu ponto de vista, ambas as funções deveriam lançar esse erro.

 

Desde já agradeço.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

classes abstracts sao classes que nao podem ser instanciadas, garante a herança total, somente subclasses nao abstratas podem ser instanciadas(notação UML nome em italico)

metodos abstracts nao possuem implementacao é generico para as subclasses, se uma classe possui pelo menos 1 metodo abstract entao a classe tambem é abstract
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Opa, beleza? Valeu pela resposta, mas eu já conheço o conceito de classes abstratas. O meu problema é com a referência de elementos não estáticos. Vou postar um código levemente diferente:

package code;

public abstract class Teste {
    public static final Teste IMPLEMENTACAO_1 = new Teste() {
        @Override
        public void executar() {
            teste1();
        }
    };

    public static final Teste IMPLEMENTACAO_2 = new Teste() {
        @Override
        public void executar() {
            teste2();
        }
    };

    public static final Teste IMPLEMENTACAO_3 = new Teste() {
        @Override
        public void executar() {
            // Non-static method 'teste3()' cannot be referenced from a static context
            teste3();
        }
    };

    public abstract void executar();

    public void teste1() {}

    protected void teste2() {}

    private void teste3() {}
}

Na classe acima, a IMPLEMENTACAO_3 não irá compilar devido ao problema de referência estática. Porém todas as implementações possuem essencialmente o mesmo código, com a única diferença ficando por conta do modificador de acesso da função chamada. Nesse caso, apenas a função privada gera o erro de compilação.

 

E eu queria saber por que.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...