logo

Palabra clave abstracta de Java

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