English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderemos sobre la abstracción en Java. Aprenderemos sobre las clases abstractas y métodos de Java, así como cómo usarlos en programas.
Las clases abstractas son clases que no se pueden instanciar (no podemos crear objetos de clases abstractas). En Java, utilizamos la palabra clave abstract para declarar una clase abstracta.
abstract class Animal { //Atributos y métodos }
Si intenta crear un objeto de una clase abstracta, se producirá un error de compilación. Por ejemplo,
Animal a1 = new Animal()
Producirá un error de compilación:
El animal es abstracto; no puede ser instanciado
A pesar de que no se puede instanciar una clase abstracta, podemos crear subclases de ella. Podemos crear objetos de la subclase para acceder a los miembros de la clase abstracta.
Antes de entenderlo a fondo, necesitamos entender el método abstracto.
Usamos la palabra clave abstracta para crear métodos abstractos. Se declara un método abstracto sin implementar. Por ejemplo,
abstract void makeSound();
Aquí, makeSound() es un método abstracto.
Es importante destacar que solo una clase abstracta puede contener métodos abstractos. Si incluimos métodos abstractos en una clase que no es abstracta, se producirá un error.Las clases abstractas pueden contener métodos abstractos y no abstractos. Esto es un ejemplo.
abstract class Animal { public void displayInfo() { System.out.println("Soy un animal."); } abstract void makeSound(); }
En el ejemplo anterior, creamos una clase abstracta Animal. Esta clase contiene un método abstracto makeSound() y un método no abstracto displayInfo().
Las clases abstractas no se pueden instanciar. Para acceder a los miembros de una clase abstracta, debemos heredarla. Por ejemplo
abstract class Animal { public void displayInfo() { System.out.println("Soy un animal."); } } class Dog extends Animal { } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Salida:
Soy un animal.
En el ejemplo anterior, creamos una clase abstracta Animal. No podemos crear un objeto de la clase Animal. Para acceder al método displayInfo() de la clase Animal, heredamos la subclase Dog de Animal.
Luego, usamos d de Dog1El objeto accede al método displayInfo().
En Java, es necesario sobrescribir los métodos abstractos de la superclase en la subclase. Esto se debe a que la subclase hereda los métodos abstractos de la superclase.
Debido a que nuestra subclase contiene métodos abstractos, necesitamos sobrescribirlos.
Nota:Si la subclase también se declara abstracta, no es necesario que sobrescriba el método abstracto.
abstract class Animal { abstract void makeSound(); public void comer() { System.out.println("Puedo comer."); } } class Dog extends Animal { public void makeSound() { System.out.println("Guau guau"); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); d1.comer(); } }
Salida:
Guau guau. Puedo comer.
En el ejemplo anterior, creamos una clase abstracta Animal. Esta clase contiene un método abstracto makeSound() y un método no abstracto eat().
Hemos heredado una subclase Dog de la superclase Animal. Aquí, la subclase Dog sobrescribe el método abstracto displayInfo().
Luego creamos el objeto Dog d1. Usando el objeto, llamamos a d1.displayInfo() y d1método .eat().
Al igual que con las clases no abstractas, usamos la palabra clave super para acceder al constructor de una clase abstracta. Por ejemplo,
abstract class Animal { Animal() { …. } } class Dog extends Animal { Dog() { super(); ... } }
Aquí, usamos super() en el constructor de Dog para acceder al constructor de la clase Animal.
Nota, super siempre debe ser la primera línea en el constructor de la subclase. AccesoPalabra clave JavaPara obtener más información.
La abstracción es un concepto importante en la programación orientada a objetos. La abstracción muestra solo la información necesaria, manteniendo ocultas todas las detalles innecesarios. Esto nos permite gestionar la complejidad omitiendo o ocultando detalles a través de ideas más simples y avanzadas.
Un ejemplo real de abstracción puede ser el freno de una motocicleta. Sabemos el funcionamiento de los frenos. Cuando pisamos el freno, la motocicleta se detiene. Pero, el funcionamiento del freno está oculto para nosotros.
Una de las principales ventajas de ocultar el funcionamiento del freno es que ahora los fabricantes pueden usar diferentes frenos para diferentes motocicletas, pero el funcionamiento del freno es el mismo.
Vamos a tomar un ejemplo para ayudarnos a entender mejor la abstracción en Java.
abstract class Animal { abstract void makeSound(); } class Dog extends Animal { public void makeSound() { System.out.println("Bark bark."); } } class Cat extends Animal { public void makeSound() { System.out.println("Meows "); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); } }
Salida:
Bark bark Meows
En el ejemplo anterior, creamos una superclase Animal. La superclase Animal tiene un método abstracto makeSound().
El método makeSound() no se puede implementar dentro de Animal. Esto se debe a que cada animal emite un sonido diferente. Por lo tanto, todas las subclases de Animal tienen diferentes implementaciones del método makeSound().
No podemos implementar makeSound() en Animal de manera que funcione correctamente para todos los subclases de Animal. Por lo tanto, la implementación de makeSound() en Animal se mantiene en estado oculto.
En el ejemplo anterior, Dog implementa su propia implementación de makeSound(), Cat implementa su propia implementación de makeSound().
Usamos la palabra clave abstract para crear clases y métodos abstractos.
Los métodos abstractos no tienen ninguna implementación (cuerpo de método).
La clase que contiene métodos abstractos también debe ser abstracta.
No podemos crear un objeto de la clase abstracta.
Para implementar las funciones de la clase abstracta, inheritamos una subclase de ella y creamos un objeto de esa subclase.
La subclase debe sobrescribir todos los métodos abstractos de la clase abstracta. Sin embargo, si la subclase se declara como abstracta, no es obligatorio sobrescribir los métodos abstractos.
Podemos usar una referencia de clase abstracta para acceder a las propiedades y métodos estáticos de la clase abstracta. Por ejemplo,
Animal.staticMethod();
En Java, las interfaces son similares a las clases abstractas. Sin embargo, las interfaces no tienen métodos no abstractos. En el siguiente tutorial, aprenderemos más sobre las interfaces.