La palabra clave abstracta se utiliza para lograr la abstracción en Java. Es un modificador sin acceso que se utiliza para crear clases y métodos abstractos.
La función de una clase abstracta es contener métodos abstractos. Sin embargo, también puede contener métodos no abstractos. El método que se declara con una palabra clave abstracta y no tiene ninguna implementación se conoce como método abstracto.
Sintaxis:-
abstract class Employee { abstract void work(); }
Nota: no podemos declarar métodos abstractos en clases no abstractas.
Reglas de palabras clave abstractas
No hacer
- No se puede utilizar una palabra clave abstracta con variables y constructores.
- Si una clase es abstracta, no se puede crear una instancia de ella.
- Si un método es abstracto, no contiene el cuerpo.
- No podemos utilizar la palabra clave abstracta con el final .
- No podemos declarar métodos abstractos como privado .
- No podemos declarar métodos abstractos como estático .
- Un método abstracto no se puede sincronizar.
Qué hacer
- Una palabra clave abstracta solo se puede utilizar con clase y método.
- Una clase abstracta puede contener constructores y métodos estáticos.
- Si una clase extiende la clase abstracta, también debe implementar al menos uno de los métodos abstractos.
- Una clase abstracta puede contener el método principal y el método final.
- Una clase abstracta puede contener métodos abstractos sobrecargados.
- Podemos declarar la clase interna local como abstracta.
- Podemos declarar el método abstracto con una cláusula de lanzamiento.
Ejemplos de palabras clave abstractas
Ejemplo 1: clase abstracta que contiene el método abstracto
abstract class Vehicle { abstract void bike(); } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample1 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); } }Pruébalo ahora
Producción:
Bike is running
Ejemplo 2: clase abstracta que contiene el método abstracto y no abstracto
abstract class Vehicle { abstract void bike(); void car() { System.out.println('Car is running'); } } class Honda extends Vehicle { @Override void bike() { System.out.println('Bike is running'); } } public class AbstractExample2 { public static void main(String[] args) { Honda obj=new Honda(); obj.bike(); obj.car(); } }Pruébalo ahora
Producción:
Bike is running Car is running
Ejemplo 3: clase abstracta que contiene el constructor
abstract class Vehicle { String msg; Vehicle(String msg) { this.msg=msg; } void display() { System.out.println(msg); } } class Honda extends Vehicle { Honda(String msg) { super(msg); } } public class AbstractExample3 { public static void main(String[] args) { Honda obj=new Honda('Constructor is invoked'); obj.display(); } }Pruébalo ahora
Producción:
Constructor is invoked
Ejemplo 4: clase abstracta que contiene métodos abstractos sobrecargados
abstract class Vehicle { abstract void display(); abstract void display(String msg); } class Honda extends Vehicle { @Override void display() { System.out.println('abstract method is invoked'); } @Override void display(String msg) { System.out.println(msg); } } public class AbstractExample4 { public static void main(String[] args) { Honda obj=new Honda(); obj.display(); obj.display('overloaded abstract method is invoked'); } }Pruébalo ahora
Producción:
abstract method is invoked overloaded abstract method is invoked
Ejemplo 5: clase abstracta interna
class Vehicle { abstract class Car { abstract void display(); } class Honda extends Car { @Override void display() { System.out.println('inner abstract class is invoked'); } } } public class AbstractExample5 { public static void main(String[] args) { Vehicle obj=new Vehicle(); Vehicle.Car c=obj.new Honda(); c.display(); } }Pruébalo ahora
Producción:
inner abstract class is invoked
Ejemplo 6: clase abstracta anidada
abstract class Vehicle { abstract class Car { abstract void display(); } } class Honda extends Vehicle { class FourWheller extends Car { @Override void display() { System.out.println('nested abstract class is invoked'); } } } public class AbstractExample6 { public static void main(String[] args) { Vehicle obj=new Honda(); Honda h=(Honda)obj; Honda.FourWheller fw=h.new FourWheller(); fw.display(); } }Pruébalo ahora
Producción:
nested abstract class is invoked