logo

Clase abstracta en Java

Una clase que se declara con la palabra clave abstracta se conoce como clase abstracta en Java . Puede tener métodos abstractos y no abstractos (método con el cuerpo).

Antes de aprender la clase abstracta de Java, primero comprendamos la abstracción en Java.

cadena como matriz

Abstracción en Java

Abstracción es un proceso que consiste en ocultar los detalles de implementación y mostrar solo la funcionalidad al usuario.

De otra forma, muestra solo cosas esenciales al usuario y oculta los detalles internos, por ejemplo, enviando SMS donde escribes el texto y envías el mensaje. No conoce el procesamiento interno sobre la entrega del mensaje.

La abstracción te permite centrarte en lo que el objeto hace en lugar de cómo lo hace.

Formas de lograr la abstracción

Hay dos formas de lograr la abstracción en Java.

  1. Clase abstracta (0 a 100%)
  2. Interfaz (100%)

Clase abstracta en Java

Una clase que se declara abstracta se conoce como clase abstracta . Puede tener métodos abstractos y no abstractos. Es necesario ampliarlo e implementar su método. No se puede crear una instancia.

Puntos para recordar

  • Una clase abstracta debe declararse con una palabra clave abstracta.
  • Puede tener métodos abstractos y no abstractos.
  • No se puede crear una instancia.
  • puede tener constructores y métodos estáticos también.
  • Puede tener métodos finales que obligarán a la subclase a no cambiar el cuerpo del método.
Reglas para la clase abstracta de Java

Ejemplo de clase abstracta

 abstract class A{} 

Método abstracto en Java

Un método que se declara abstracto y no tiene implementación se conoce como método abstracto.

Ejemplo de método abstracto

 abstract void printStatus();//no method body and abstract 

Ejemplo de clase abstracta que tiene un método abstracto

En este ejemplo, Bike es una clase abstracta que contiene solo un método abstracto ejecutado. Su implementación la proporciona la clase Honda.

 abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } } 
Pruébalo ahora
 running safely 

Comprender el escenario real de la clase abstracta.

En este ejemplo, Forma es la clase abstracta y su implementación la proporcionan las clases Rectángulo y Círculo.

En general, no conocemos la clase de implementación (que está oculta para el usuario final), y el objeto de la clase de implementación es proporcionado por el método de fábrica .

A método de fábrica es un método que devuelve la instancia de la clase. Aprenderemos sobre el método de fábrica más adelante.

En este ejemplo, si crea la instancia de la clase Rectángulo, se invocará el método draw() de la clase Rectángulo.

Archivo: TestAbstraction1.java

 abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } } 
Pruébalo ahora
 drawing circle 

Otro ejemplo de clase abstracta en java.

Archivo: TestBank.java

 abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }} 
Pruébalo ahora
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Clase abstracta que tiene constructor, miembro de datos y métodos.

Una clase abstracta puede tener un miembro de datos, un método abstracto, un cuerpo de método (método no abstracto), un constructor e incluso un método main().

ario khan

Archivo: TestAbstraction2.java

 //Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } } 
Pruébalo ahora
 bike is created running safely.. gear changed 

Regla: si hay un método abstracto en una clase, esa clase debe ser abstracta.

 class Bike12{ abstract void run(); } 
Pruébalo ahora
 compile time error 

Regla: si está ampliando una clase abstracta que tiene un método abstracto, debe proporcionar la implementación del método o hacer que esta clase sea abstracta.


Otro escenario real de clase abstracta.

La clase abstracta también se puede utilizar para proporcionar alguna implementación de la interfaz . En tal caso, no se puede obligar al usuario final a anular todos los métodos de la interfaz.

Nota: Si es principiante en Java, primero aprenda la interfaz y omita este ejemplo.

 interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} 
Pruébalo ahora
 Output:I am a I am b I am c I am d