Heim >Java >javaLernprogramm >Definition der abstrakten Java-Klasse und Beispielcode-Sharing abstrakter Methoden
Dieser Artikel stellt hauptsächlich die relevanten Informationen über den Unterschied zwischen Java abstrakter Klasse und Schnittstelle vor. Freunde, die es benötigen, können darauf verweisen...
Abgesehen davon, dass abstrakte Klassen keine Objekte instanziieren können, können dieanderen -Funktionen der Klasse weiterhin auf die gleiche Weise wie auf normale Klassen zugegriffen werden.
Abstrakte Klasse
Klasse in der Java-Sprache, um abstrakte Klassen zu definieren. Das folgende Beispiel:
/* 文件名 : Employee.java */ public abstract class Employee { private String name; private String address; private int number; public Employee(String name, String address, int number) { System.out.println("Constructing an Employee"); this.name = name; this.address = address; this.number = number; } public double computePay() { System.out.println("Inside Employee computePay"); return 0.0; } public void mailCheck() { System.out.println("Mailing a check to " + this.name + " " + this.address); } public String toString() { return name + " " + address + " " + number; } public String getName() { return name; } public String getAddress() { return address; } public void setAddress(String newAddress) { address = newAddress; } public int getNumber() { return number; } }Beachten Sie, dass die Employee-Klasse nicht anders ist. Obwohl es sich bei der Klasse um eine abstrakte Klasse handelt, verfügt sie immer noch über 3 Mitgliedsvariablen, 7 Mitgliedsmethoden und 1 Konstruktormethode. Wenn Sie nun das folgende Beispiel ausprobieren:
/* 文件名 : AbstractDemo.java */ public class AbstractDemo { public static void main(String [] args) { /* 以下是不允许的,会引发错误 */ Employee e = new Employee("George W.", "Houston, TX", 43); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } }Wenn Sie versuchen, die AbstractDemo-Klasse zu kompilieren, erhalten Sie die folgende Fehlermeldung:
Employee.java:46: Employee is abstract; cannot be instantiated Employee e = new Employee("George W.", "Houston, TX", 43); ^ 1 error
Inheriting abstract class
/* 文件名 : Salary.java */ public class Salary extends Employee { private double salary; //Annual salary public Salary(String name, String address, int number, double salary) { super(name, address, number); setSalary(salary); } public void mailCheck() { System.out.println("Within mailCheck of Salary class "); System.out.println("Mailing check to " + getName() + " with salary " + salary); } public double getSalary() { return salary; } public void setSalary(double newSalary) { if(newSalary >= 0.0) { salary = newSalary; } } public double computePay() { System.out.println("Computing salary pay for " + getName()); return salary/52; } }Obwohl wir kein Employee-Klassenobjekt instanziieren können, wird das Objekt dies tun, wenn wir ein Salary-Klassenobjekt instanziieren Erben Sie 3 Mitgliedsvariablen und 7 Mitgliedsmethoden von der Employee-Klasse.
/* 文件名 : AbstractDemo.java */ public class AbstractDemo { public static void main(String [] args) { Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); System.out.println("Call mailCheck using Salary reference --"); s.mailCheck(); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } }Die Ergebnisse des Kompilierens und Ausführens des obigen Programms sind wie folgt:
Constructing an Employee Constructing an Employee Call mailCheck using Salary reference -- Within mailCheck of Salary class Mailing check to Mohd Mohtashim with salary 3600.0 Call mailCheck using Employee reference-- Within mailCheck of Salary class Mailing check to John Adams with salary 2400.
Abstrakte Methode
Wenn Sie entwerfen möchten In einer solchen Klasse enthält die Klasse eine spezielle Mitgliedsmethode, deren spezifische Implementierung durch ihre Unterklasse bestimmt wird. Anschließend können Sie die Methode als abstrakte Methode in der übergeordneten Klasse deklarieren. Das Schlüsselwort Abstract kann auch verwendet werden, um abstrakte Methoden zu deklarieren, die nur einen Methodennamen und keinen Methodenkörper enthalten. Die abstrakte Methode ist nicht definiert und auf den Methodennamen folgt direkt ein Semikolon anstelle von geschweiften Klammern.public abstract class Employee { private String name; private String address; private int number; public abstract double computePay(); //其余代码 }Das Deklarieren einer abstrakten Methode führt zu den folgenden zwei Ergebnissen:
Das obige ist der detaillierte Inhalt vonDefinition der abstrakten Java-Klasse und Beispielcode-Sharing abstrakter Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!