Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

interface e classe no mesmo .java

Olá,

Na aula 2, eu vi que pode-se colocar classe e interface no mesmo .java

Em um determinado momento, o instrutor tenta acessar a variável declarada na interface. O que achei estranho é que a classe não estava implementando a interface.

Quando a classe e interface estão no mesmo arquivo .java, não existe a necessidade de implementar a interface? Ele faz isso automatico?

6 respostas

Boa tarde Tiago!

Poderia postar o código referente à esta dúvida?


interface A {
    int TAMANHO = 5;
    void autentica (String nome, String senha);
}

class B {
    int B;
    B() {
        A.TAMANHO = 15;
    }
    void B() {
    }
}

segundo o instrutor, o codigo não vai compilar porque não se pode mudar uma constante de uma interface, o valor é sempre final. e o erro de compilação é mostrado pelo instrutor no video. mas em nenhum momento a classe B está implementando a interface.

Kim,

Isto acontece porque variáveis definidas em interfaces são estáticas (static) e finais (final) por padrão.

Elas são estáticas, porque interfaces não podem ser instanciadas por si só, elas precisam de uma implementação. Então elas devem existir em um contexto estático, onde não existe instância alguma.

E elas são finais, para se ter a certeza de que o valor declarado na interface é uma constante e não pode ter seu valor modificado por outra parte do programa.

Espero ter ajudado, bons estudos!

mas eu sempre achei que interface fosse um contrato e que a premissa para cumprir e acessar esse contrato seria implementar a interface, por mais que a variavel seja estática, sempre achei que para qualquer um acessar ou fazer qualquer coisa com ela, precisaria implementar a interface

solução!

Olá Kim! Veja bem, você está confundindo um pouco as coisas. Como o Phelipe disse, por padrão os atributos de uma interface são public e static. Por serem estático (static), não se faz necessário uma instancia para acessar o atributo. desta forma é possível acessar o atributo simplesmente através da "classe". Logo, se você perceber, foi isso que ocorreu na aula, o atributo TAMANHO foi acessado fazendo da seguinte forma:A.TAMANHO.

No entanto, perceba que apenas é possível acessar os atributos, os métodos não são possíveis. Como você disse, a interface é um "contrato" que para se firmar esse contrato é necessário implementar os métodos estabelecidos por esta interface. Assim, após isso, você teria acesso ao métodos da interface.

Espero ter ajudado! Bons Estudos!

ok obrigado,

eu achava que mesmo sendo static, tinha que implementar a interface. obrigado pelos esclarecimentos.