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; } }
/* 文件名 : 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(); } }
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; } }
/* 文件名 : 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(); } }
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 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!