Qual é a diferença entre uma interface, classe abstrata e classe concreta?

Referência:

Decodejava.com apresentando tutorial Java simples e fácil.

  • Classe: Todo programa Java inicia com uma classe. Uma classe descreve seu comportamento através de seus métodos, onde um método é um local onde a lógica de uma classe é armazenada.

Para saber como escrever sua primeira classe em Java com um exemplo de código simples, você pode ler

-

Executando um programa Java - Decodejava.com

  • Classe abstrata é uma classe declarada com a palavra-chave abstract. Ao contrário de uma classe java simples, uma classe abstrata pode não apenas conter métodos definidos regularmente, mas também métodos abstratos ou uma mistura de métodos abstratos e regulares.

Para mais classes Abstratas, métodos abstratos e suas várias regras em exemplos fáceis de código

, você pode ler

Classe abstrata de Java- Decodejava.com

  • Interface é uma classe 100% abstrata que é declarada com a interface de palavra-chave. Os métodos de interface são implicitamente abstratos e não podem ter métodos definidos regularmente.

Para mais informações sobre interface e várias regras em exemplos fáceis de código,

você pode ler

Interface em Java

Boa sorte!

Interface-

É apenas a declaração de uma classe. Não há nenhuma definição na interface.

Classe abstrata

Ele contém a definição também com declaração, mas não é o nosso modelo perfeito. Pode ter métodos abstratos e não abstratos.

Classe de concreto

Ele também contém a definição e a declaração, mas aqui todos os métodos têm sua implementação.

Se você deseja apenas definir um blueprint a ser usado ao escrever classes relacionadas e quando se importa apenas com os métodos / campos definidos no blueprint e não nas classes subjacentes, você é bom com uma interface. Vamos usar uma lista como exemplo. Você se preocupa com os métodos add, remove, get e similares, e deixa a pessoa que implementa a classe de lista real (como LinkedList ou ArrayList) se preocupar com como fazê-lo. De qualquer forma, você terá uma referência a um objeto do tipo List e usará os métodos definidos nesse "blueprint". No entanto, a classe real desse objeto será uma das classes que implementa a interface List, pois você não pode criar uma instância da List (como é apenas um blueprint, ele não possui definições de método).

Se você deseja fornecer novamente um tipo de "blueprint" para classes relacionadas, mas também define alguns métodos (digamos, toString ou qualquer outra coisa), você pode fazê-lo com uma classe abstrata. A classe abstrata não pode ser instanciada (o mesmo que uma interface), pois contém alguns métodos abstratos que são essencialmente "blueprints", juntamente com alguns métodos totalmente implementados.

Finalmente, uma classe concreta é uma classe que não contém métodos abstratos (portanto, todos os métodos são realmente implementados) que podem ser instanciados e usados ​​em seu código. Pode, é claro, ser uma implementação de uma interface ou pode estender uma classe abstrata.

Como uma observação lateral, em Java você pode implementar várias interfaces, mas não pode estender várias classes base (abstratas ou não). Por quê? Porque os designers de linguagem decidiram que não valia a pena a dor de cabeça em implementá-lo. Se você tivesse duas classes base que implementam o mesmo método (digamos, draw ()) e desejasse estender as duas na sua classe, qual método draw () seria chamado quando você chamasse YourMethod.draw ()? Ao implementar várias interfaces, isso não é um problema, pois você pode ter várias interfaces declarando o método draw (), mas a implementação será apenas uma - a que você escreve.