Java-Programme verwenden abstrakte Klassen, um abstrakte Konzepte in der Natur zu implementieren. Die Funktion einer abstrakten Klasse besteht darin, viele verwandte Klassen zusammenzufassen, um eine gemeinsame Klasse, also eine abstrakte Klasse, bereitzustellen, und die von ihr organisierten spezifischen Klassen werden von ihr als ihre Unterklassen abgeleitet. Eine abstrakte Klasse charakterisiert das öffentliche Verhalten und überträgt es über den Vererbungsmechanismus auf ihre abgeleiteten Klassen. In abstrakten Klassen definierte Methoden werden als abstrakte Methoden bezeichnet. Diese Methoden verfügen nur über die Deklaration des Methodenheaders und verwenden ein Semikolon, um die Definition des Methodenkörpers zu ersetzen, dh es wird nur die Schnittstellenform der Mitgliedsmethode ohne spezifische Operationen definiert . Nur die Neudefinition abstrakter Membermethoden durch eine abgeleitete Klasse implementiert tatsächlich Vorgänge, die sich auf die abgeleitete Klasse beziehen.
Nachdem jede Unterklasse die abstrakte Methode der übergeordneten Klasse geerbt hat, definiert sie sie mit unterschiedlichen Anweisungen und Methodenkörpern neu und bildet mehrere Unterklassen mit demselben Namen, demselben Rückgabewert und derselben Parameterliste, mit demselben Zweck, aber bestimmten spezifischen Unterschieden Implementierungen. Der Zweck der Definition abstrakter Methoden in einer abstrakten Klasse besteht darin, eine Schnittstelle zu implementieren, dh alle Unterklassen präsentieren der Außenwelt eine Methode mit demselben Namen. Eine abstrakte Klasse ist eine Sammlung öffentlicher Attribute aller ihrer Unterklassen und eine Klasse, die eine oder mehrere abstrakte Methoden enthält. Einer der großen Vorteile der Verwendung abstrakter Klassen besteht darin, dass Sie diese öffentlichen Eigenschaften vollständig nutzen können, um die Effizienz bei der Entwicklung und Wartung von Programmen zu verbessern. Für abstrakte Klassen und abstrakte Methoden gelten folgende Einschränkungen:
(1) Jede mit dem abstrakten Modifikator geänderte Klasse wird als abstrakte Klasse bezeichnet. Jede mit dem abstrakten Modifikator geänderte Mitgliedsmethode wird als abstrakte Methode bezeichnet.
(2) Eine abstrakte Klasse kann null oder mehr abstrakte Methoden haben oder auch nicht abstrakte Methoden enthalten.
(3) In abstrakten Klassen sind keine abstrakten Methoden erforderlich, Klassen mit abstrakten Methoden müssen jedoch abstrakte Klassen sein.
(4) Bei abstrakten Methoden werden in der abstrakten Klasse nur der Methodenname und sein Typ angegeben, ohne dass der Implementierungscode geschrieben wird.
(5) Eine abstrakte Klasse kann Unterklassen ableiten, und alle in der abstrakten Klasse definierten abstrakten Methoden müssen in den von der abstrakten Klasse abgeleiteten Unterklassen implementiert werden.
(6) Abstrakte Klassen können keine Objekte erstellen. Die Arbeit zum Erstellen von Objekten wird durch von abstrakten Klassen abgeleitete Unterklassen implementiert.
(7) Wenn es in der übergeordneten Klasse eine abstrakte Methode mit demselben Namen gibt, kann es in der Unterklasse keine andere abstrakte Methode mit demselben Namen geben.
(8) Abstract kann dieselbe Klasse nicht parallel zu Final ändern.
(9) Abstract kann nicht verwendet werden, um dieselbe Methode parallel zu private, static, final oder native zu ändern.
Die Java-Sprache schreibt vor, dass eine Klasse, wenn sie über eine abstrakte Methode verfügt, als abstrakte Klasse deklariert werden muss.
Wenn eine Unterklasse von einer übergeordneten Klasse erbt, wenn in der übergeordneten Klasse abstrakte Methoden vorhanden sind und die Unterklasse der Meinung ist, dass sie alle abstrakten Methoden der übergeordneten Klasse implementieren kann, muss die Unterklasse alle abstrakten Methoden der übergeordneten Klasse implementieren. wie zum Beispiel:
/** * Die Unterklasse „Dog“ erbt die abstrakte Klasse „Animal“ und implementiert die abstrakte Methode „genießen“ * @author gacl * */class „Dog“ erweitert „Animal“ { /** * Die Klasse „Dog“ fügt ihre eigenen eindeutigen Attribute hinzu*/ public String „public Dog“. ( String n, String c) { super(n);//Rufen Sie den Konstruktor der übergeordneten Klasse Animal this.furColor = c; auf .." ); }}
Wenn die abstrakte Methode in der übergeordneten Klasse nicht von der Unterklasse implementiert werden kann, deklarieren Sie die Unterklasse als abstrakte Klasse, z. B.:
/** * Die Unterklasse Cat erbt hier von der abstrakten Klasse Animal und erbt natürlich die in der Animal-Klasse deklarierte abstrakte Methode Enjoy(). * Die Unterklasse Cat ist jedoch der Ansicht, dass es nicht angemessen ist, diese Methode Enjoy() zu implementieren sich selbst, also Es deklariert sich selbst als abstrakte Klasse. * @author gacl * */abstract class Cat erweitert Animal { /** * Cat fügt seine eigenen eindeutigen Attribute hinzu*/ public String eyeColor; public Cat(String n, String c) { super(n);//Rufen Sie die übergeordnete Klasse auf Animal's Konstruktionsmethode this.eyeColor = c }}
Die Unterklasse Cat erbt hier von der abstrakten Klasse Animal und erbt natürlich die in der Animal-Klasse deklarierte abstrakte Methode Enjoy (). Die Unterklasse Cat ist jedoch der Ansicht, dass es nicht angemessen ist, diese Methode Enjoy () allein zu implementieren nennt sich selbst. Als abstrakte Klasse deklariert. Wer auch immer die abstrakte Methode „Genießen“ implementiert und wer auch immer die Unterklasse erbt, implementiert dann die abstrakte Methode „Genießen“ (). wie:
/** * Die Unterklasse BlueCat erbt die abstrakte Klasse Cat und implementiert die abstrakte Methode Enjoy, die von der übergeordneten Klasse Cat geerbt wurde * @author gacl * */class BlueCat erweitert Cat { public BlueCat(String n, String c) { super(n , c); } /** * Implementiert die abstrakte Methode Enjoy */ @Override public void healthy() { System.out.println("Die blaue Katze miaut...");
Der vollständige Testcode lautet wie folgt:
package javastudy.summary;/** * Übergeordnete Klasse Animal * Abstract vor der Klasse hinzufügen, d. h. wie folgt deklarieren: abstract class Animal * Auf diese Weise wird die Animal-Klasse zu einer abstrakten Klasse */abstract class Animal { public String name; public Animal(String name) { this.name = name; /** * Abstrakte Methode * Es gibt nur die Definition der Methode, aber keine Implementierung der Methode. */ public abstract void Enjoy(); }/** * Die Unterklasse Cat erbt hier von der abstrakten Klasse Animal und erbt natürlich die in der Animal-Klasse deklarierte abstrakte Methode Enjoy(), * aber die Unterklasse Cat ist der Meinung, dass dies der Fall sein muss Von sich selbst implementiert Diese Methode „Genießen“ ist ebenfalls ungeeignet, daher deklariert sie sich selbst als abstrakte Klasse. * @author gacl * */abstract class Cat erweitert Animal { /** * Cat fügt seine eigenen eindeutigen Attribute hinzu*/ public String eyeColor; public Cat(String n, String c) { super(n);//Rufen Sie die übergeordnete Klasse auf Die Konstruktionsmethode von Animal this.eyeColor = c; }}/** * Die Unterklasse BlueCat erbt die abstrakte Klasse Cat und implementiert die von der übergeordneten Klasse Cat * @author gacl * */class BlueCat geerbte abstrakte Methode Cat { public BlueCat(String n, String c) { super(n, c); } /** * Implementiert die abstrakte Methode healthy */ @Override public void healthy() { System.out.println("Blue Cat miaut. .."); } }/** * Die Unterklasse Dog erbt die abstrakte Klasse Animal und implementiert die abstrakte Methode Enjoy * @author gacl * */class Dog erweitert Animal { /** * Die Dog-Klasse fügt ihre eigenen eindeutigen Attribute hinzu * /öffentlicher String furColor; public Dog(String n, String c) { super(n);//Rufen Sie den Konstruktor der übergeordneten Klasse Animal this.furColor = c } @Override public void healthy() { System.out.println("Dog bellt ...."); }} public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * Nachdem die Cat-Klasse als abstrakte Klasse deklariert wurde, kann sie nicht instanziiert werden. * Da die abstrakte Klasse unvollständig ist und Arme und Beine fehlen, kann die abstrakte Klasse nicht instanziiert werden. */ //Cat c = new Cat("Catname","blue"); Dog d = new Dog("dogname","black"); d.enjoy();//Rufen Sie die von Ihnen implementierte Enjoy-Methode BlueCat auf = new BlueCat("BlueCatname","blue"); c.enjoy();//Rufen Sie die von Ihnen implementierte Enjoy-Methode auf}}