Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Clase abstracta de Java y métodos abstractos

En este tutorial, aprenderemos sobre la abstracción en Java. Aprenderemos sobre las clases y métodos abstractos de Java y cómo usarlos en nuestro programa.

Clase abstracta de Java

Una clase abstracta es una clase que no puede ser instanciada (no podemos crear objetos de una clase abstracta). En Java, usamos la abstractpalabra clave para declarar una clase abstracta.
  1. abstract class Animal {
  2. //attributes and methods
  3. }
Si intentamos crear objetos de una clase abstracta, obtendremos un error de compilación. Por ejemplo,
  1. Animal a1 = new Animal()
Generará un error de compilación:
El animal es abstracto; no puede ser instanciado
Aunque las clases abstractas no pueden instanciarse, podemos crear subclases a partir de ellas. Podemos crear objetos de subclases para acceder a miembros de la clase abstracta.
Antes de conocerlo en detalle, debemos comprender los métodos abstractos.

Método abstracto de Java

Usamos la misma palabra clave abstractpara crear métodos abstractos. Se declara un método abstracto sin una implementación. Por ejemplo,
  1. abstract void makeSound();
Aquí, makeSound()es un método abstracto. El cuerpo de makeSound()es reemplazado por ;.
Es importante tener en cuenta que solo una clase abstracta puede contener métodos abstractos. Si incluimos métodos abstractos dentro de una clase que no es abstracta, obtendremos un error.
Una clase abstracta puede contener métodos abstractos y no abstractos. Aquí hay un ejemplo.
  1. abstract class Animal {
  2. public void displayInfo() {
  3. System.out.println(“I am an animal.”);
  4. }
  5. abstract void makeSound();
  6. }
En el ejemplo anterior, hemos creado una clase abstracta Animal . Contiene un método abstracto makeSound()y un método no abstracto displayInfo().

Herencia de la clase abstracta

Una clase abstracta no puede ser instanciada. Para acceder a los miembros de una clase abstracta, debemos heredarla. Por ejemplo

Ejemplo 1: Herencia de la clase abstracta

  1. abstract class Animal {
  2. public void displayInfo() {
  3. System.out.println("I am an animal.");
  4. }
  5. }
  6. class Dog extends Animal {
  7. }
  8. class Main {
  9. public static void main(String[] args) {
  10. Dog d1 = new Dog();
  11. d1.displayInfo();
  12. }
  13. }
Cuando ejecutamos el programa, la salida será:
Soy un animal
En el ejemplo anterior, hemos creado una clase abstracta Animal . No podemos crear objetos de animales . Para acceder a la displayInfo()del animal , hemos heredado una subclase perro del animal .
Luego usamos el objeto d1 de Dog para acceder al método displayInfo().

Anulación de métodos abstractos

En Java, es obligatorio anular los métodos abstractos de la superclase en la subclase. Es porque la subclase hereda los métodos abstractos de la superclase.
Dado que nuestra subclase incluye métodos abstractos, debemos anularlos.
Nota: Si la subclase también se declara abstracta, no es obligatorio anular los métodos abstractos.

Ejemplo 2: anulación del método abstracto

  1. abstract class Animal {
  2. abstract void makeSound();
  3. public void eat() {
  4. System.out.println("I can eat.");
  5. }
  6. }
  7. class Dog extends Animal {
  8. public void makeSound() {
  9. System.out.println("Bark bark");
  10. }
  11. }
  12. class Main {
  13. public static void main(String[] args) {
  14. Dog d1 = new Dog();
  15. d1.makeSound();
  16. d1.eat();
  17. }
  18. }
Cuando ejecutamos el programa, la salida será:
Ladrar ladrar.
Puedo comer.
En el ejemplo anterior, hemos creado una clase abstracta Animal . La clase contiene un método abstracto makeSound()y un método no abstracto eat().
Hemos heredado una subclase Perro de la superclase Animal . Aquí, la subclase Dog anula el método abstracto displayInfo().
Luego creamos un objeto d1 de Perro . Usando el objeto, llamamos a d1.displayInfo()d1.eat()métodos.

Accede al constructor de clases abstractas

Similar a las clases no abstractas, accedemos al constructor de una clase abstracta desde la subclase usando la superpalabra clave. Por ejemplo,
  1. abstract class Animal {
  2. Animal() {
  3. ….
  4. }
  5. }
  6. class Dog extends Animal {
  7. Dog() {
  8. super();
  9. ...
  10. }
  11. }
Aquí, hemos utilizado el super()interior del constructor de Perro para acceder al constructor del Animal .
Tenga en cuenta que supersiempre debe ser la primera declaración del constructor de la subclase. Visite la palabra clave súper Java para obtener más información.

¿Por qué la abstracción de Java?

La abstracción es un concepto importante de la programación orientada a objetos. La abstracción solo muestra la información necesaria y todos los detalles innecesarios se mantienen ocultos. Esto nos permite gestionar la complejidad al omitir u ocultar detalles con una idea más simple y de alto nivel.
Un ejemplo práctico de abstracción pueden ser los frenos de moto. Sabemos lo que hace el freno. Cuando aplicamos el freno, la moto se detendrá. Sin embargo, el funcionamiento del freno se mantiene oculto para nosotros.
La principal ventaja de ocultar el funcionamiento del freno es que ahora el fabricante puede implementar el freno de manera diferente para diferentes motos, sin embargo, lo que haga el freno será el mismo.
Tomemos un ejemplo que nos ayuda a comprender mejor la abstracción de Java.

Ejemplo 3: abstracción de Java

  1. abstract class Animal {
  2. abstract void makeSound();
  3. }
  4. class Dog extends Animal {
  5. public void makeSound() {
  6. System.out.println("Bark bark.");
  7. }
  8. }
  9. class Cat extends Animal {
  10. public void makeSound() {
  11. System.out.println("Meows ");
  12. }
  13. }
  14. class Main {
  15. public static void main(String[] args) {
  16. Dog d1 = new Dog();
  17. d1.makeSound();
  18. Cat c1 = new Cat();
  19. c1.makeSound();
  20. }
  21. }
Cuando ejecutamos el programa, la salida será:
Ladrar ladrar
Maullidos
En el ejemplo anterior, hemos creado una superclase Animal . La superclase Animal tiene un método abstracto makeSound().
El makeSound()método no se puede implementar dentro de Animal . Es porque cada animal hace sonidos diferentes. Entonces, todas las subclases de Animal tendrían una implementación diferente de makeSound().
No podemos implementar makeSound()en Animal de tal manera que pueda ser correcto para todas las subclases de Animal . Por lo tanto, la implementación de makeSound()en Animal se mantiene oculta.
En el ejemplo anterior, Dog realiza su propia implementación de makeSound()Cat realiza su propia implementación de makeSound().

Puntos clave para recordar

  • Usamos la abstractpalabra clave para crear clases y métodos abstractos.
  • Un método abstracto no tiene ninguna implementación (cuerpo del método).
  • Una clase que contiene métodos abstractos también debe ser abstracta.
  • No podemos crear objetos de una clase abstracta.
  • Para implementar características de una clase abstracta, heredamos subclases de ella y creamos objetos de la subclase.
  • Una subclase debe anular todos los métodos abstractos de una clase abstracta. Sin embargo, si la subclase se declara abstracta, no es obligatorio anular los métodos abstractos.
  • Podemos acceder a los atributos y métodos estáticos de una clase abstracta utilizando la referencia de la clase abstracta. Por ejemplo,
    1. Animal.staticMethod();

Interfaz de Java

En Java, una interfaz es similar a una clase abstracta. Sin embargo, las interfaces no tienen ningún método no abstracto. Aprenderemos más sobre las interfaces en el próximo tutorial.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas