Mehrere wichtige Punkte, auf die Sie bei der Verwendung abstrakter Klassen achten sollten:
Eine Klasse, die eine oder mehrere abstrakte Methoden enthält, muss als abstrakte Klasse deklariert werden.
Die Erklärung einer Klasse als abstrakte Klasse enthält nicht unbedingt abstrakte Methoden.
Es wird allgemein angenommen, dass bestimmte Methoden nicht in abstrakte Klassen einbezogen werden sollten.
Abstrakte Klassen können nicht instanziiert werden, dh Objekte dieser Klasse können nicht erstellt werden.
Beispielcode:
Die Codekopie lautet wie folgt:
import Java.util.*;
/**
* Dieses Programm zeigt abstrakte Klassen.
* @version 1.01 2004-02-21
* @Author Cay Horstmann
*/
öffentliche Klasse Persontest
{
öffentliche statische Leere Main (String [] Args)
{
Person [] Menschen = neue Person [2];
// Füllen Sie das People -Array mit Studenten- und Mitarbeiterobjekten
Leute [0] = neuer Mitarbeiter ("Harry Hacker", 50000, 1989, 10, 1);
people [1] = neuer Schüler ("Maria Morris", "Informatik");
// Namen und Beschreibungen aller Personenobjekte ausdrucken
für (Person P: Menschen)
System.out.println (p.getName () + "," + p.getDescription ());
}
}
abstrakte Klassenperson
{
öffentliche Person (String n)
{
Name = n;
}
public abstract String getDescription ();
öffentliche Zeichenfolge GetName ()
{
Rückgabename;
}
privater Zeichenfolge Name;
}
Der Mitarbeiter der Klasse erweitert die Person
{
öffentlicher Mitarbeiter (String N, Double S, int Jahr, int Monat, int Tag)
{
Super (n);
Gehalt = S;
Gregoriancalendar -Kalender = neuer Gregoriancalendar (Jahr, Monat - 1, Tag);
hireday = calendar.getTime ();
}
öffentliches Doppel getSalary ()
{
Returngehalt;
}
öffentliches Datum gethireday ()
{
Rückkehr Hireday;
}
öffentliche String GetDescription ()
{
return string.format ("ein Mitarbeiter mit einem Gehalt von%%. 2f", Gehalt);
}
Öffentliche Leere RaiseSalary (Doppelby -Abschnitt)
{
doppelt raise = Gehalt * BY -Percent / 100;
Gehalt += Erhöhung;
}
privates Doppelgehalt;
privates Datum Hireday;
}
Klassenstudent erweitert die Person
{
/**
* @param n den Namen des Schülers
* @param m der Hauptfach des Schülers
*/
öffentlicher Student (String N, String M)
{
// Gassen Sie N an Super -Class -Konstruktor
Super (n);
Major = m;
}
öffentliche String GetDescription ()
{
Rückkehr "einen Schüler mit Hauptfach" + Major;
}
private String -Major;
}
Im Codeblock:
Die Codekopie lautet wie folgt:
für (Person P: Menschen)
System.out.println (p.getName () + "," + p.getDescription ());
In P.GetDescription () bezieht sich die Methode, die sich auf das Subklassenobjekt der spezifischen Unterklasse bezieht.
GetDescription () persönlich kann nicht weggelassen werden, da der Compiler nur aufgerufene Methoden zulässt, die in der Klasse deklariert sind.