java 抽象方法,抽象類

最近在看JAVA核心技術卷1,下面是我自己的理解,如果有不對的地方,歡迎大家指正

抽象類和抽象方法都由abstract關鍵字標記,擁有抽象方法的類就肯定是抽象類,但是抽象類不一定包含抽象方法

抽象方法

先來看下抽象方法的寫法

// 類和方法都由abstract 標記,因爲包含抽象方法的類肯定是抽象類,所以類也要由abstract 標記
public abstract class Person{
	// 抽象方法沒有方法體{},不需要具體實現其中的內容
	// 抽象方法應該被定義爲public或protected,如果定義爲private則不能被子類繼承,就沒法實現這個方法
	// 如果不指定訪問權限,則默認爲public
	public abstract void getDescription();
}

抽象類

上面已經說過了,擁有抽象方法的類就肯定是抽象類,但是抽象類也可以不包含抽象方法

我們已經有父類和子類了,一般會繼承父類來創造想要的特定實例,那爲什麼還會提供一個高層次的抽象類呢?這是因爲非抽象方法都是要有具體實現的,而我們有時候只是知道一組子類的共同特性,但還不清楚具體要怎麼實現,而定義成抽象方法就不需要實現了。子類只需要繼承抽象類,再實現其抽象方法即可。

舉個例子
比如學生類(Student),員工類(Employee),人類(Person)
Person類是Student類,Employee類的父類
我們都知道無論是學生還是員工他們都有姓名,年齡,以及個人性格,
姓名和年齡我們明確知道要怎麼實現,所以定義成普通方法即可,但是個人性格我們還不太清楚,所以定義成抽象方法

public abstract class Person{
	private String name;
	private int age;
	public Person(String name ,int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return this.name;
	}
	public int getAge(){
		return this.age;
	}
	public abstract String getDescription();
}

public class Student extends Person(){
	public abstract String getDescription(){
		return "a student";
	}
}

public class Employee extends Person(){
	public abstract String getDescription(){
		return "a Employee ";
	}
}

抽象類的使用

  • 抽象類不能被實例化,如果將一個類聲明爲abstract,就不能創建這個類的對象,new Person()會報錯,但可以創建具體的子類對象;

  • 擴展抽象類的兩種選擇

      在子類中保留抽象類中的部分或所有抽象方法,扔不具體實現,這樣就必須將子類也設置成抽象類;
      在子類中定義全部方法,這樣子類就不是抽象類了。
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章