Java 中的抽象類

抽象類別在Java中與介面類似,只是它可以包含預設方法的實作。抽象類別可以有沒有主體的抽象方法,也可以有具體的方法實作。使用 `abstract` 關鍵字來建立抽象類別和方法。在Java中,抽象類別無法被實例化。抽象類別主要用於提供子類別擴展和實作抽象方法,並覆蓋或使用抽象類別中實作的方法。

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 中的抽象類重要點

  1. abstract 關鍵字用於在 Java 中創建抽象類。
  2. Java 中的抽象類無法實例化。
  3. 我們可以使用 abstract 關鍵字創建抽象方法,抽象方法沒有方法體。
  4. 如果一個類有抽象方法,則該類也應該使用 abstract 關鍵字聲明為抽象類,否則它將無法編譯。
  5. 抽象類不一定要有抽象方法。即使沒有聲明任何抽象方法,我們也可以將類標記為抽象。
  6. 如果抽象類沒有任何方法實現,最好使用接口,因為 Java 不支持多類繼承。
  7. Java 中抽象類的子類必須實現所有抽象方法,除非子類也是抽象類。
  8. 所有接口中的方法都是隱式抽象的,除非接口方法是靜態的或默認的。 靜態方法和默認方法是在Java 8中添加到接口中的,有關詳細信息,請閱讀Java 8 接口更改
  9. Java 抽象類別可以實現接口,甚至可以不提供接口方法的實現。
  10. Java 抽象類別用於為所有子類提供通用方法實現,或者提供默認實現。
  11. 如果抽象類別具有main()方法,我們可以像運行其他類一樣在Java中運行它。

這就是Java中抽象類別的全部。 如果我漏掉了重要的任何事情,請通過評論告訴我們。

Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java