抽象類別在Java中與介面類似,只是它可以包含預設方法的實作。抽象類別可以有沒有主體的抽象方法,也可以有具體的方法實作。使用 `abstract` 關鍵字來建立抽象類別和方法。在Java中,抽象類別無法被實例化。抽象類別主要用於提供子類別擴展和實作抽象方法,並覆蓋或使用抽象類別中實作的方法。
Java中的抽象類別
package com.journaldev.design;
//抽象類別
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//抽象方法
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
注意,work()
是一個沒有主體的抽象方法。以下是在Java中擴展抽象類別的具體類別示例。
package com.journaldev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//以抽象類別為基礎的編碼
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//繼承中使用抽象類別中實作的方法
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
請注意,子類別 Employee 使用 Java 中的繼承 inheritance in java 繼承超類別 Person 的屬性和方法。還請注意 Employee 類別中使用了 Override annotation。閱讀更多有關為什麼我們在覆寫方法時應該總是使用 Override annotation。
Java 中的抽象類重要點
abstract
關鍵字用於在 Java 中創建抽象類。- Java 中的抽象類無法實例化。
- 我們可以使用
abstract
關鍵字創建抽象方法,抽象方法沒有方法體。 - 如果一個類有抽象方法,則該類也應該使用 abstract 關鍵字聲明為抽象類,否則它將無法編譯。
- 抽象類不一定要有抽象方法。即使沒有聲明任何抽象方法,我們也可以將類標記為抽象。
- 如果抽象類沒有任何方法實現,最好使用接口,因為 Java 不支持多類繼承。
- Java 中抽象類的子類必須實現所有抽象方法,除非子類也是抽象類。
- 所有接口中的方法都是隱式抽象的,除非接口方法是靜態的或默認的。 靜態方法和默認方法是在Java 8中添加到接口中的,有關詳細信息,請閱讀Java 8 接口更改。
- Java 抽象類別可以實現接口,甚至可以不提供接口方法的實現。
- Java 抽象類別用於為所有子類提供通用方法實現,或者提供默認實現。
- 如果抽象類別具有
main()
方法,我們可以像運行其他類一樣在Java中運行它。
這就是Java中抽象類別的全部。 如果我漏掉了重要的任何事情,請通過評論告訴我們。
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java