Un método sin cuerpo (sin implementación) se conoce como método abstracto. Un método siempre debe declararse en una clase abstracta, o en otras palabras, se puede decir que si una clase tiene un método abstracto, también debe declararse abstracto. En el último tutorial discutimos la clase abstracta, si aún no la ha marcado, léalo aquí: clase abstracta en Java, antes de leer esta guía.
Así es como se ve un método abstracto en Java:
public abstract int myMethod(int n1, int n2);
Como puede ver, este no tiene cuerpo.
Reglas del método abstracto
1. Los métodos abstractos no tienen cuerpo, solo tienen la firma del método como se muestra arriba.
2. Si una clase tiene un método abstracto, debe declararse abstracto, lo contrario no es cierto, lo que significa que una clase abstracta no necesita tener un método abstracto obligatorio.
3. Si una clase regular extiende una clase abstracta, la clase debe implementar todos los métodos abstractos de la clase padre abstracta o también debe declararse abstracta.
Ejemplo 1: método abstracto en una clase abstracta
//abstract class abstract class Sum{ /* These two are abstract methods, the child class * must implement these methods */ public abstract int sumOfTwo(int n1, int n2); public abstract int sumOfThree(int n1, int n2, int n3); //Regular method public void disp(){ System.out.println("Method of class Sum"); } } //Regular class extends abstract class class Demo extends Sum{ /* If I don't provide the implementation of these two methods, the * program will throw compilation error. */ public int sumOfTwo(int num1, int num2){ return num1+num2; } public int sumOfThree(int num1, int num2, int num3){ return num1+num2+num3; } public static void main(String args[]){ Sum obj = new Demo(); System.out.println(obj.sumOfTwo(3, 7)); System.out.println(obj.sumOfThree(4, 3, 19)); obj.disp(); } }
Producción:
10 26 Method of class Sum
Ejemplo 2: método abstracto en la interfaz
Todos los métodos de una interfaz son abstractos públicos por defecto. No es posible tener métodos concretos (métodos regulares con cuerpo) en una interfaz.
//Interface interface Multiply{ //abstract methods public abstract int multiplyTwo(int n1, int n2); /* We need not to mention public and abstract in interface * as all the methods in interface are * public and abstract by default so the compiler will * treat this as * public abstract multiplyThree(int n1, int n2, int n3); */ int multiplyThree(int n1, int n2, int n3); /* Regular (or concrete) methods are not allowed in an interface * so if I uncomment this method, you will get compilation error * public void disp(){ * System.out.println("I will give error if u uncomment me"); * } */ } class Demo implements Multiply{ public int multiplyTwo(int num1, int num2){ return num1*num2; } public int multiplyThree(int num1, int num2, int num3){ return num1*num2*num3; } public static void main(String args[]){ Multiply obj = new Demo(); System.out.println(obj.multiplyTwo(3, 7)); System.out.println(obj.multiplyThree(1, 9, 0)); } }
Producción:
21 0
Referencia:
Método abstracto Javadoc