Na programação orientada a objetos, abstração é definida como ocultar do usuário detalhes desnecessários (implementação) e focar em detalhes essenciais (funcionalidade). Aumenta a eficiência e, portanto, reduz a complexidade.
Em Java, a abstração pode ser alcançada usando classes abstratas e métodos. Neste tutorial, aprenderemos sobre métodos abstratos e seu uso em Java.
Classe abstrata
Uma classe é declarada abstrata usando o abstrato palavra-chave. Pode ter zero ou mais métodos abstratos e não abstratos. Precisamos estender a classe abstrata e implementar seus métodos. Não pode ser instanciado.
Sintaxe para classe abstrata:
abstract class class_name { //abstract or non-abstract methods }
Nota: Uma classe abstrata pode ou não conter métodos abstratos.
Método Abstrato
Um método declarado usando o abstrato palavra-chave dentro de uma classe abstrata e não possui uma definição (implementação) é chamada de método abstrato.
Quando precisamos apenas da declaração do método em uma superclasse, isso pode ser conseguido declarando os métodos como abstratos.
O método abstrato também é chamado de responsabilidade de subclasse, pois não possui implementação na superclasse. Portanto, uma subclasse deve substituí-la para fornecer a definição do método.
Sintaxe para método abstrato:
abstract return_type method_name( [ argument-list ] );
Aqui, o método abstrato não possui um corpo de método. Pode ter zero ou mais argumentos.
Pontos para lembrar
Os pontos a seguir são as regras importantes para métodos abstratos em Java:
- Um método abstrato não possui corpo (implementação), apenas possui uma assinatura de método (declaração). A classe que estende a classe abstrata implementa os métodos abstratos.
- Se uma classe não abstrata (concreta) estende uma classe abstrata, então a classe deve implementar todos os métodos abstratos dessa classe abstrata. Caso contrário, a classe concreta também deverá ser declarada como abstrata.
- Como os métodos abstratos possuem apenas a assinatura, ela precisa ter ponto e vírgula (;) no final.
- A seguir estão vários combinações ilegais de outros modificadores para métodos em relação a abstrato modificador:
- final
- nativo abstrato
- abstrato sincronizado
- abstrato estático
- abstrato privado
- abstrato strictfp
- Se uma classe contém um método abstrato, ela precisa ser abstrata e vice-versa não é verdade.
Exemplo de método abstrato em Java
Exemplo 1:
No exemplo a seguir, aprenderemos como a abstração é alcançada usando classes abstratas e métodos abstratos.
AbstractMethodEx1.java
// abstract class abstract class Multiply { // abstract methods // sub class must implement these methods public abstract int MultiplyTwo (int n1, int n2); public abstract int MultiplyThree (int n1, int n2, int n3); // regular method with body public void show() { System.out.println ('Method of abstract class Multiply'); } } // Regular class extends abstract class class AbstractMethodEx1 extends Multiply { // if the abstract methods are not implemented, compiler will give an error public int MultiplyTwo (int num1, int num2) { return num1 * num2; } public int MultiplyThree (int num1, int num2, int num3) { return num1 * num2 * num3; } // main method public static void main (String args[]) { Multiply obj = new AbstractMethodEx1(); System.out.println ('Multiplication of 2 numbers: ' + obj.MultiplyTwo (10, 50)); System.out.println ('Multiplication of 3 numbers: ' + obj.MultiplyThree (5, 8, 10)); obj.show(); } }
Saída:
Exemplo 2:
Por padrão, todos os métodos de uma interface são públicos e abstratos. Uma interface não pode conter métodos concretos, ou seja, métodos regulares com corpo.
AbstractMethodEx2.java
// interface interface SquareCube { // abstract methods public abstract int squareNum (int n); // it not necessary to add public and abstract keywords // as the methods in interface are public abstract by default int cubeNum (int n); // regular methods are not allowed in an interface // if we uncomment this method, compiler will give an error /*public void disp() { System.out.println ('I will give error if u uncomment me'); } */ } public class AbstractMethodEx2 implements SquareCube { // defining the abstract methods of interface public int squareNum (int num) { return num * num; } public int cubeNum (int num) { return num * num * num; } // main method public static void main(String args[]){ SquareCube obj = new AbstractMethodEx2(); System.out.println('Square of number is: ' + obj.squareNum (7) ); System.out.println('Cube of number is: ' + obj.cubeNum (7)); } }
Saída:
Desta forma, aprendemos sobre o método abstrato e sua implementação em Java.