abstract
Las clases declaradas con palabras clave en Java se denominan clases abstractas. Puede tener métodos abstractos y no abstractos (métodos con cuerpo).
Antes de aprender las clases abstractas de Java, primero comprendamos las abstracciones en Java.
Abstracción en Java
La abstracción es el proceso de ocultar los detalles de la implementación y mostrar solo la funcionalidad al usuario.
De otra manera, solo muestra las cosas importantes al usuario y oculta los detalles internos, por ejemplo: para enviar un mensaje de texto, simplemente ingrese el texto y envíe el mensaje. Tampoco es necesario que conozca el procesamiento interno de la entrega de correo.
La abstracción le permite concentrarse en lo que hace el objeto (la función que implementa), no en cómo lo hace.
Lograr métodos abstractos
Hay dos formas de lograr la abstracción en Java. Son:
- Clase abstracta (parcial)
- Interfaz (completa)
1. Clases abstractas en Java
El uso de abstract
palabras clave para declarar una clase se denomina clase abstracta. Necesita ampliarlo e implementarlo. No se puede crear una instancia.
Ejemplo de clase abstracta
abstract class A{
}
Java
Método abstracto
Se declara como un abstract
método no implementa el método abstracto se llama.
Ejemplo de método abstracto
abstract void printStatus();//no body and abstract
Java
Ejemplos de clases abstractas con métodos abstractos
En este ejemplo, Bike
es una clase abstracta, un método abstracto sólo contiene: run()
. Consiste en Honda
proporcionar clase de implementación.
abstract class Bike {
abstract void run();
}
class Honda4 extends Bike {
void run() {
// run 方法的实现
System.out.println("running safely..");
}
public static void main(String args[]) {
Bike obj = new Honda4();
obj.run();
}
}
Java
Los resultados de la ejecución del código en el ejemplo anterior son los siguientes:
running safely..
Java
Comprender los escenarios de aplicación reales de las clases abstractas.
En este ejemplo, Shape
es una clase abstracta y su implementación es proporcionada por la clase Rectangle
y respectivamente Circle
. En la mayoría de los casos, no conocemos la clase de implementación (es decir, oculta al usuario final) y los objetos de la clase de implementación los proporciona el método de fábrica.
Los métodos de fábrica son métodos que se utilizan para devolver una instancia de una clase. Aprenderemos sobre el método de fábrica en la siguiente sección más adelante .
En este ejemplo, Rectangle
se crea una instancia de la clase Rectangle
y draw()
se llamará al método de la clase . Cree un archivo de clase: TestAbstraction1.java
su código es el siguiente:
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 real scenario, object is provided through
// method e.g. getShape() method
s.draw();
}
}
Java
El resultado de la ejecución del código anterior es el siguiente:
drawing circle
Java
Otro ejemplo de clase abstracta en java
Cree un archivo Java: el TestBank.java
código es el siguiente:
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() + " %");
}
}
Java
El resultado de la ejecución del código anterior es el siguiente:
Rate of Interest is: 7 %
Rate of Interest is: 8 %
Java
Clases abstractas con constructores, miembros de datos, métodos, etc.
Las clases abstractas pueden tener miembros de datos, métodos abstractos, cuerpos de métodos, constructores e incluso main()
métodos. Cree un archivo Java: el TestAbstraction2.java
código es el siguiente:
//example of abstract class that have method body
abstract class Bike {
Bike() {
System.out.println("bike is created");
}
abstract void run();
void changeGear() {
System.out.println("gear changed");
}
}
class Honda extends Bike {
void run() {
System.out.println("running safely..");
}
}
class TestAbstraction2 {
public static void main(String args[]) {
Bike obj = new Honda();
obj.run();
obj.changeGear();
}
}
Java
El resultado de la ejecución del código anterior es el siguiente:
bike is created
running safely..
gear changed
Java
Regla: Si hay métodos abstractos en una clase, esa clase debe declararse como abstracta.
class Bike12{
abstract void run();
}
Java
El Bike12
compilador no adopta lo anterior .
Regla: si amplía cualquier clase abstracta con métodos abstractos, debe proporcionar una implementación del método o hacer que esta clase sea abstracta.
Otro escenario real de clases abstractas
Las clases abstractas también se pueden utilizar para proporcionar algunas implementaciones de interfaces. En este caso, es posible que el usuario final no se vea obligado a cubrir todos los métodos de la interfaz.
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();
}
}
Java
El resultado de la ejecución del código anterior es el siguiente:
I am a
I am b
I am c
I am d