Conocimientos básicos de Java (análisis súper detallado, diseño claro): abstracción de Java

abstractLas 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:

  1. Clase abstracta (parcial)
  2. Interfaz (completa)

1. Clases abstractas en Java

El uso de abstractpalabras 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 abstractmé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, Bikees una clase abstracta, un método abstracto sólo contiene: run(). Consiste en Hondaproporcionar 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, Shapees una clase abstracta y su implementación es proporcionada por la clase Rectangley 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, Rectanglese crea una instancia de la clase Rectangley draw()se llamará al método de la clase . Cree un archivo de clase: TestAbstraction1.javasu 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.javacó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.javacó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 Bike12compilador 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

Supongo que te gusta

Origin blog.csdn.net/weixin_43314519/article/details/108722705
Recomendado
Clasificación