Varios puntos clave a los que debe prestar atención al usar clases abstractas:
Una clase que contiene uno o más métodos abstractos debe declararse como una clase abstracta.
Declarar una clase como clase abstracta no necesariamente contiene métodos abstractos.
En general, se cree que los métodos específicos no deben incluirse en las clases abstractas.
Las clases abstractas no pueden ser instanciadas, es decir, los objetos de esta clase no se pueden crear.
Código de ejemplo:
La copia del código es la siguiente:
import java.util.*;
/**
* Este programa demuestra clases abstractas.
* @version 1.01 2004-02-21
* @author Cay Horstmann
*/
personal de clase pública
{
Public static void main (String [] args)
{
Persona [] personas = nueva persona [2];
// Llena la matriz de personas con objetos de estudiantes y empleados
People [0] = nuevo empleado ("Harry Hacker", 50000, 1989, 10, 1);
personas [1] = nuevo estudiante ("Maria Morris", "informática");
// Imprima nombres y descripciones de todos los objetos de la persona
para (persona P: gente)
System.out.println (p.getName () + "," + p.getDescription ());
}
}
persona abstracta
{
persona pública (cadena n)
{
nombre = n;
}
Public Abstract String getDescription ();
Public String getName ()
{
nombre de retorno;
}
nombre de cadena privada;
}
El empleado de la clase extiende a la persona
{
Empleado público (String N, Double S, Int Year, Int Month, Int Day)
{
super (n);
salario = s;
Calendario Gregoriancalendar = nuevo Gregoriancalendar (año, mes - 1, día);
Hireday = calendar.gettime ();
}
Public Double GetSalary ()
{
salario de devolución;
}
Fecha pública Gethireday ()
{
regresar contratado;
}
Public String getDescription ()
{
return String.Format ("Un empleado con un salario de $%. 2f", salario);
}
Public Void Raiseslary (doble bygercent)
{
doble aumento = salario * por porcentaje / 100;
salario += elevar;
}
salario doble privado;
fecha privada contratada;
}
El estudiante de clase extiende a la persona
{
/**
* @param n el nombre del estudiante
* @param m la especialidad del estudiante
*/
Estudiante público (String n, String m)
{
// pasar n al constructor superclase
super (n);
mayor = m;
}
Public String getDescription ()
{
devolver "un estudiante especializado en" + mayor;
}
Mayor de cadena privada;
}
En el bloque de código:
La copia del código es la siguiente:
para (persona P: gente)
System.out.println (p.getName () + "," + p.getDescription ());
En P.getDescription (), el método que se referirá al objeto de subclase de la subclase específica.
GetDescription () en la clase persona no se puede omitir porque el compilador solo permite que los métodos de llamadas se declaren en la clase.