Classes abstratas e interfaces são usadas para abstração em Java. A abstração na programação orientada a objetos refere-se à ocultação dos detalhes de implementação dos usuários finais.
Na abstração, você pode saber quais são as funcionalidades, mas não pode saber como elas foram implementadas.
Vamos olhar para cada um deles e tentar entender por que eles são usados.
últimas postagens
Classe Abstrata
Uma classe que não pode ser instanciada como um objeto e pode ou não ter métodos abstratos é chamada de classe abstrata em Java. Um método abstrato é um método que não possui um corpo de implementação quando declarado.
Exemplo de uma classe abstrata GraphicObject – Oracle
Você pode criar uma classe abstrata especificando a palavra-chave abstract antes da palavra-chave class.
abstract class abstractClass { void run() { System.out.println("ran"); } }
Uma classe abstrata pode ser estendida por outras classes. Em outras palavras, também pode ser subclassificado.
abstract class AbstractClass { void run() { System.out.println("ran"); } } class ExtendingAbstractClass extends AbstractClass { void newMethod() { System.out.println("new"); } @Override void run() { System.out.println("override"); } }
Classes abstratas são usadas para implementar métodos comuns entre várias classes que estendem uma determinada classe abstrata. Além disso, a capacidade de definir métodos abstratos dentro de classes abstratas os torna incrivelmente úteis para classes que possuem métodos semelhantes, mas com implementações diferentes. Vamos dar um exemplo.
Considere um carro que possui algumas funcionalidades, como partida, parada, ré, etc. Essas funcionalidades são comuns a todos os tipos de carros.
Mas e quanto às funcionalidades de automação, como a direção autônoma? A implementação dessas funcionalidades pode diferir para diferentes tipos de carros. Vamos ver como você pode criar um programa orientado a objetos relacionado a ele.
Em primeiro lugar, crie uma classe Car que será estendida por várias classes de diferentes tipos de carros.
abstract class Car { void start() { // implementation System.out.println("runs car"); } void stop() { // implementation System.out.println("engine stops"); } void reverse() { // implementation System.out.println("reverse mode enabled"); } abstract void selfDrive(); }
Os métodos start(), stop() e reverse() são métodos comuns em todos os carros. Portanto, sua implementação já está definida dentro da própria classe Car. No entanto, um determinado tipo de carro pode ter diferentes implementações do modo autônomo. E assim, você pode definir selfDrive() como um método abstrato e implementá-lo de diferentes maneiras em diferentes classes de diferentes tipos de carros.
class CarTypeA extends Car { @Override void start() { super.start(); } @Override void stop() { super.stop(); } @Override void reverse() { super.reverse(); } void selfDrive() { // custom implementation System.out.println("Type A self driving mode enabled"); } }
class CarTypeB extends Car { // ...all similar methods void selfDrive() { // custom implementation // different implementation than CarTypeB System.out.println("Type B self driving mode enabled"); } }
É importante observar que, se uma subclasse não implementa todos os métodos abstratos definidos na classe abstrata, ela deve ser declarada como uma classe abstrata.
Interface
Uma interface é uma maneira de dizer a uma classe quais métodos devem ser implementados por ela. Por exemplo, se você considerar o exemplo de um carro, ele tem algumas funções básicas. Ele pode começar, mover e parar. Estas funções são comuns em todos os carros.
Portanto, se você implementar uma interface de um carro em uma classe, deverá implementar todos os métodos para que o carro funcione corretamente e com segurança.
Semelhante às classes abstratas, não podemos instanciar ou criar objetos de uma interface. Ela pode ser considerada uma classe totalmente abstrata porque contém apenas métodos abstratos, ou seja, métodos sem um corpo de implementação.
Você pode criar uma interface usando a palavra-chave interface.
interface CAR { void start(); void stop(); void move(); }
Implemente uma interface usando a palavra-chave implements ao definir uma classe.
class CarTypeB implements CAR { public void start() { System.out.println("started"); } public void stop() { System.out.println("stopped"); } public void move() { System.out.println("running"); } }
Semelhança
Nenhuma instanciação como um objeto é a única coisa que classes abstratas e interfaces têm em comum.
Diferenças
Herança e implementação de interface de classe abstrataApenas uma classe abstrata pode ser herdada por uma classe.Múltiplas interfaces podem ser implementadas por uma classe.Tipos de variáveisPode ter variáveis finais, não finais, estáticas e não estáticas.Pode ter apenas variáveis estáticas e finais. Tipos de métodos Pode conter métodos abstratos e não abstratos. Pode conter apenas métodos abstratos, mas métodos estáticos são uma exceção. Modificadores de acesso Uma classe abstrata pode ter um modificador de acesso. As assinaturas de método definidas na interface são públicas por padrão. Uma interface não tem um modificador de acesso.Construtores e DestruidoresEle pode declarar construtores e destruidores.Não pode declarar construtores ou destruidores.VelocidadeFastSlowDiferenças entre classe abstrata e interface
Quando usar classe abstrata e interface?
Use classes abstratas quando:
- Você deseja compartilhar alguns métodos e campos comuns entre várias classes.
- Declarar campos não estáticos e não finais para modificar o estado do objeto ao qual estão vinculados.
Você pode usar interfaces quando:
- Você deseja definir o comportamento de uma classe que implementa a interface, mas não se importa com a maneira como ela é implementada.
- Você quer ter certeza de que uma classe implementa todos os métodos para funcionar corretamente.
Palavras Finais
As interfaces são usadas principalmente para criar APIs porque podem fornecer uma estrutura para implementar a funcionalidade sem se preocupar com a implementação real.
As classes abstratas geralmente são usadas para compartilhar métodos abstratos e não abstratos comuns entre várias classes, que estendem a classe abstrata para tornar o código mais reutilizável.
Aprenda mais sobre Java com a ajuda destes cursos online para java. Você está se preparando para uma entrevista em Java? Aqui estão algumas perguntas da entrevista sobre Programação Orientada a Objetos.