aprendizaje day21- clase abstracta (clase abstracta) y el modo de diseño de la plantilla de Java (TemplateMethod)

Una clase abstracta (clase abstracta)

1. Con la definición de una nueva subclase jerarquía de herencia, la clase se vuelven más y más concreto, la clase padre es más general, y más versátil. Clase debe estar diseñado para asegurar que las clases de padres e hijos a las características de las acciones. A veces un padre tiene que ser diseñado tan abstracto que no tiene un ejemplo específico, una clase de este tipo se llama una clase abstracta.

Por ejemplo, la clase de animal hay manera de describir la forma específica de moverse, sólo la clase de animales y todos sus métodos son el tratamiento abstracto, es decir, no escribir la implementación específica. Esperar hasta que la sucesión en un animal específico, a continuación, la realización concreta cuerpo del método.

2. Cuando se utiliza la palabra clave abstracta de modificar una clase que se llama una clase abstracta.

3. Del mismo modo, cuando se utiliza para modificar un método abstracto se llama métodos abstractos. (Método Resumen: La única forma de declaración, no hay aplicación de la ";" Fin ejemplo: int abstracta abstractMethod (int a) ;.)

4. Una clase abstracta no puede ser instanciada. Una clase abstracta se utiliza para ser heredado, subclases de la clase abstracta deben reemplazar el método clase padre abstracta, y un método del mismo. Si no anula todos los métodos abstractos, todavía es una clase abstracta que siempre que hay un método de la clase abstracta, entonces esta clase debe ser una clase abstracta.

El método privado, constructor, los métodos estáticos, propiedades finales modificando el método no puede ser abstracta ,.

Paquete Día 15; 

pública  abstracta  clase Animal {
     pública  abstracta  vacío Test (); // siempre que exista un método abstracto clase, entonces esta clase es una clase abstracta debe ser 
    
    pública  abstracta  vacío Mover (); 
} 

la clase Perro del extiende Animal {
     público  vacío de prueba () {
         // el autogenerado TODO Método del trozo 
        
    } 
    
    pública  vacío move () { 
        System.out.println ( "se mueve al perro se está ejecutando" ); 
        
    }         
} 

la clase de pescado del extiende Animal {
     público vacío Test () {
         // el autogenerado TODO Método del trozo 
        
    } 
    
    pública  vacío Mover () { 
        System.out.println ( "mueve los peces nadan" ); 
        
    } 
} 

abstracta  clase Aves del extiende Animal { // clase abstracta puede heredar abstracta 
    pública  vacío Mover () {
         // el autogenerado TODO Método del trozo 
        
    } 
    
    pública  abstracta  vacío Test (); 
}
empaquetar Día 15; 

pública  clase de prueba {
     públicas  estáticas  void main (String [] args) { 
        perro d = nuevo perro (); 
        d.move (); 
        
        F Fish = nuevo Fish (); 
        f.move (); 
    } 
}

Imprimir los resultados:

Mueve el perro corre
peces nadan movimientos

 

Preguntas: 1. ¿Por qué las clases abstractas no pueden utilizar la declaración final de palabras clave?

A: clase modificada final es clase final no puede ser heredada. Una clase abstracta no puede ser instanciada, están hechos para ser heredado, y subclases de la clase abstracta deben reemplazar el método clase padre abstracta, y un método del mismo.

Pregunta: 2 Puede definir un constructor de la clase abstracta hacer?

R: Una clase abstracta puede tener un constructor, pero no puede crear una instancia de una clase abstracta directamente.

 

Ejercicio: Escribir una clase Empleado, declarada como una clase abstracta que contiene los siguientes tres propiedades: nombre, identificación, salay. Para proporcionar la estructura necesaria y métodos abstractos: trabajo (). Para la clase Manager, no sólo los empleados, así como las bonificaciones propiedades (bono). Por favor utilice la idea de la herencia, las clases y el diseño de clases CommonEmployee Manager, la clase necesaria para proporcionar los métodos de acceso a propiedades necesarias.

empaquetar Día 15; 

pública  abstracta  clase Empleado {
     público Empleado () { // 显示构造器
        
    } 
    
    int Identificación; 
    Nombre de la cadena; 
    doble salario; 
    
    pública  abstracta  vacío de trabajo (); 
} 


Clase CommonEmployee extiende Empleado { 
    
    público  vacío setCommonEmployeeInFo ( int ID, String name, doble salario) {
         súper .ID = Identificación;
        súper .name = nombre;
        súper = .salarysalario; 
    } 
    
    Pública  vacío getCommonEmployeeInFo () { 
        System.out.println ( súper .id); 
        System.out.println ( súper .name); 
        System.out.println ( súper .salary); 
    } 
    
    Pública  vacío de trabajo () {
         // generada automáticamente TODO Stub 
        System.out.println ( "这是一个普通员工" ); 
    } 
} 


Clase Gestor extiende Empleado {
     doble bono; 
    
    pública  vacío setManagerInFo ( int ID, String name, dobleel salario, Doble Bonus) {
         super .ID = ID;
         Súper .name = nombre;
         Súper una .salary = el salario;
         el presente .bonus = Bono; // esta es la única parte de la dirección del atributo, con el presente 
    } 
    
    pública  vacío getManagerInFo () { 
        System.out.println ( Súper .id); 
        System.out.println ( Súper .name); 
        System.out.println ( Súper una .salary); 
        System.out.println ( el presente .bonus); 
    } 
    
    pública  vacío trabajo () {
        // autogenerado TODO Método del trozo, 
        System.out.println ( "Se trata de un liderazgo" ); 
    } 
}
empaquetar Día 15; 

pública  clase de prueba {
     públicas  estáticas  void main (String [] args) { 
        CommonEmployee ce = nueva CommonEmployee (); 
        ce.work (); 
        ce.setCommonEmployeeInFo ( 1007, "小明", 6000 ); 
        ce.getCommonEmployeeInFo (); 
        
        Administrador de m = nuevo Manager (); 
        m.work (); 
        m.setManagerInFo ( 2371, "小白", 10000, 6000 ); 
        m.getManagerInFo (); 
    } 
}

Imprimir los resultados:

 

En segundo lugar, el patrón de diseño Template Method (TemplateMethod)

clase abstracta encarna una especie de patrón de diseño de la plantilla, clase abstracta como una plantilla universal de múltiples subclases, las subclases para extender, sobre la base de la transformación de la clase abstracta, subclase pero conservará la clase general patrón de comportamiento abstracto.

Una clase abstracta es como un esbozo, que el método abstracto es que cada título del capítulo; subclases basadas en el título de cada capítulo para refinar estos.

 

Para resolver el problema:

1. En el marco de la puesta en práctica es determinar la función interna, parte de la implementación es incierta. A continuación, puede ir a la incertidumbre está expuesto parcialmente, de manera que las subclases de lograr.

2. Escribir una superclase abstracta, clase padre proporciona un método común para múltiples subclases, y los uno o más métodos que dejan a sus subclases de implementar, es un patrón de plantilla.

 

Ejemplo:

Paquete Día 15; 
/ **
* Plantilla de patrón de diseño
* /
público abstracta clase Templete { pública abstracta vacío código (); pública definitiva sin efecto la getTime () { // se utiliza sólo para crear una subclases, peso final, pero no subclases método de escritura largo Start = System.currentTimeMillis (); // devuelve el número actual de segundo código (); largo fin = System.currentTimeMillis (); System.out.println ( "método de tiempo de ejecución de código:" + (fin - Inicio)); } } clase TestTmp la extiende Templete { público void código () { // la generada-Auto TODO Método Stub int K = 0 ; para ( int i = 0; I <500000; I ++ ) { K + = 1. ; } System.out.println (K); // K mostrar el número de ejecuciones } }
empaquetar Día 15; 

pública  clase de prueba {
     públicas  estáticas  void main (String [] args) { 
        
        TestTmp t = nueva TestTmp (); 
        t.getTime (); 
    } 
}

Imprimir los resultados:

500000
método de código de tiempo de ejecución: 1

 

Supongo que te gusta

Origin www.cnblogs.com/su-peng/p/12525962.html
Recomendado
Clasificación