Posso considerar os métodos de interface como métodos abstratos?


15

Eu estava pensando sobre isso e tinha algumas dúvidas.

Quando declaro uma interface, por exemplo:

public interface MyInterface
{
   public void method1();
   public void method2();
}

Esses métodos de interface poderiam ser considerados abstratos? O que quero dizer é que o conceito de um método abstrato é:

Um método abstrato é um método declarado, mas não contém implementação.

Então, esses métodos poderiam ser considerados abstratos? Eles não são métodos abstratos "puros", como eu não estou usando a abstractpalavra, mas conceitualmente, parece que eles são.

O que você pode me falar sobre isso?

Obrigado.


Provavelmente o melhor em SO
billy.bob 30/09/11

5
@ billy.bob - acho muito abstrato para o Stack Overflow. Não há um problema de codificação específico aqui.
ChrisF

Esse código é Java?
Andres F.

não, não é. é apenas um exemplo. a questão não está focada em nenhuma linguagem de programação.
Rogcg

Respostas:


14

Uma interface é como uma classe abstrata "puramente". A classe e todos os seus métodos são abstratos. Uma classe abstrata pode ter implementado métodos, mas a própria classe não pode ser instanciada (útil para herança e após DRY).

Para uma interface, como não há nenhuma implementação, elas são úteis para seus propósitos: um contrato. Se você implementar a interface, deverá  implementar os métodos na interface.

Portanto, a diferença é que uma classe abstrata pode ter implementado métodos, enquanto uma interface não.

A razão pela qual eles são separados é para que uma classe possa implementar várias interfaces. Java e C # restringem uma classe a inerente a uma única classe pai. Alguns idiomas permitem herdar de várias classes e você pode realizar o trabalho de uma interface por meio de uma classe abstrata "puramente". Mas a herança múltipla tem seus problemas, a saber, o temido Problema do Diamante


+1 por incorporar a diferença entre herança de uma classe abstrata e implementação de uma ou mais interfaces.

O problema do diamante é um paradoxo impressionante.
Rogcg

1
Eu discordo de 'Uma interface é como uma parte de "classe puramente abstrata". Eles são dois tipos diferentes de 'blocos de construção' de OO; portanto, não são realmente semelhantes. Eles compartilham algumas características comuns, mas na natureza eles são diferentes tipos, mais como homens e mulheres, por exemplo :)
NoChance

5
@ Emmand Kareem Não discordo da parte de 'Uma interface é como uma classe "puramente" abstrata ". É por isso que eu escrevi :-). Se você tiver qualquer boas razões para o seu post, por favor desacordo, eu gostaria de ouvir
codificador

Vale a pena notar que o c # 8 também introduz o conceito de implementação de interface padrão
John Wu

11

Encontrei uma resposta útil aqui: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

Todos os métodos em uma interface são implicitamente abstratos, portanto o modificador abstrato não é usado com os métodos de interface (poderia ser - simplesmente não é necessário).


1
Observe também que uma classe abstrata estende um outro objeto. As interfaces não têm noção de superclasse.

2
Observe também que você pode implementar várias interfaces, mas só pode herdar de uma classe, abstrata ou não.
NullUserException 30/09

@ ThorbjørnRavnAndersen: Uma interface pode estender uma ou mais interfaces. Não é a mesma coisa que uma superclasse, mas é um nível de herança.
Unholysampler

Você pode implementar várias interfaces. Parece o conceito de herança múltipla, mas não exatamente.
Rogcg

@unholysampler, que não é uma superclasse - como eu disse.

4

Classes abstratas podem ter métodos abstratos.

As interfaces podem ter apenas métodos abstratos.

method1()e method2()no seu exemplo são métodos abstratos.


-1

A diferença aqui é que as classes abstratas podem conter detalhes de implementação, embora não possam ser instanciadas por elas mesmas. Enquanto uma interface é apenas um modelo para uma classe


8
Métodos abstratos não podem conter detalhes de implementação. Classes abstratas podem.
Matt H

Eu sei a diferença entre um método e uma classe - mas não consigo entender o que você está dizendo?
precisa saber é o seguinte

Sua resposta afirma que métodos abstratos podem conter detalhes de implementação - eles não podem. Apenas um erro de digitação?
Matt H

1
Corrigi o erro de digitação.
Martijn Verburg

1
@ billy.bob essa pergunta é sobre o método abstact.
precisa saber é o seguinte

-2

Portanto, em uma subclasse, o método abstrato herdado pode novamente ser abstrato sem implementação, enquanto que se uma classe implementa uma interface, seu método deve ser implementado.


-3

As classes de interface não têm métodos abstratos. Eles não têm nenhum método. Eles apenas têm uma lista de métodos que outra classe teria que implementar para poder se adaptar à interface. No seu exemplo, não há método method1 e método method2 até que alguém adicione esses métodos a uma classe.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.