Pergunta

Eu tenho a seguinte interface em Java

public interface IFoo
{
    public abstract void foo();
    public void bar();
}

O que é a diferença entre foo () e bar ()? Quando devo usar o abstrato?

Ambos parecem conseguir o que eu quero a menos que eu estou faltando alguma coisa sutil?

Atualizar Duplicate de Por que alguém iria declarar um método interface Java como abstrato?

Foi útil?

Solução

Não há qualquer diferença funcional. Nenhuma implementação é sempre fornecido em uma interface Java para todas as declarações de método são implicitamente abstrato.

Veja [1]: http: //java.sun .com / docs / books / tutorial / java / IandI / abstract.html

Uma forma citação direta do acima:

Nota:. Todos os métodos em uma interface (veja a seção Interfaces) são implicitamente abstrato, de modo que o modificador abstract não é usado com métodos de interface (que poderia ser-não é apenas necessária)

Outras dicas

métodos

interface são ambos public e abstract por padrão. Não há nenhuma diferença entre foo() e bar() e você pode remover todas as palavras-chave public e abstract.

Você não está faltando alguma coisa. Do linguagem Java Specification :

Cada declaração de método no corpo de uma interface é implicitamente abstrato, portanto, seu corpo é sempre representado por um ponto e vírgula, não um bloco.

Cada declaração de método no corpo de uma interface é implicitamente público.

Em outras palavras, você pode omitir o public bem como a abstract sobre os métodos de interface.

é redundante (não há diferença entre as duas declarações) e explicitamente desencorajado em seção 9.4 da especificação Java Idioma:

Para compatibilidade com versões mais antigas da plataforma Java, é permitido mas desencorajado, como uma questão de estilo, para especificar de forma redundante o resumo modificador de métodos declarados em interfaces.

E public é igualmente desnecessário e desanimado:

É permitido, mas fortemente desencorajada por uma questão de estilo, para especificar de forma redundante a modificador pública para métodos de interface.

Eu não sei por que public é fortemente desanimado, mas abstract está apenas desanimado ...

Ambos realizar a mesma, uma vez que todos os métodos em uma interface são abstratos.

abstract neste cenário é desnecessário (como está marcando métodos em interfaces como public).

Você faria em vez usar isso em um método em uma classe abstrata, a fim de impor a sua substituindo por uma subclasse.

Não existe são diferença entre declarações. Conceitualmente, todos os métodos em uma interface são abstratos.

Não faz diferença. Todos os métodos em uma interface Java são sempre abstrato.

Veja a primeira nota neste link: http://java.sun.com/docs/books/ tutorial / java / IandI / abstract.html

Ambos foo () e bar () são abstratos como eles são declarados dentro de uma interface. A palavra abstrata que você usou aqui não tem significado -. Removê-lo melhor

Interfaces em Java são iguais "de alguma forma" para algumas classes totalmente abstratas, assim que adicionar a palavra-chave "abstrato" para uma declaração de método em uma interface não tem nada a ver com o método!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top