1. 程式人生 > >Java入門之抽象類

Java入門之抽象類

1.抽象類的基本定義

1.抽象類:abstract修飾的類稱為做抽象類; 2.抽象方法abstract修飾的方法叫做抽象方法,抽象方法只有宣告部分,而沒有具體的方法體。 3.abstract關鍵字:abstract可以修飾類和方法。

2.抽象類的特點

1)一個abstract類只關心它的子類是否具有某種功能,並不關心其自身功能的具體行為,功能的具體行為由子類負責實現。 2)抽象類不能直接被例項化,即不能用new關鍵字建立該抽象類的物件。 3)抽象類中可以沒有abstract方法(為了強迫使用者必須通過繼承來使用這個類);但是一旦類中包含了abstract方法,則這個“類”一定是abstract類,即有抽象方法的類一定是抽象類。 4)抽象類的子類必須實現抽象類中的所有抽象方法,否則子類也必須是抽象類。 5)抽象類中的抽象方法是多型的一種表現形式。

3.抽象類與普通類的區別

1)抽象類前面由abstract修飾,而普通類沒有。 2)抽象類不能建立物件,普通類可以建立物件。 3)抽象類中可以有抽象方法,普通類中一定沒有抽象方法;

4.常用關鍵字的使用注意點

1)final不能修飾抽象類 原因:如果抽象類前面可以新增final就意味著該類無法被繼承,也就意味著該抽象類中的抽象方法永遠無法得到實現,也就意味著抽象類中的抽象方法是無用的。

2)抽象類中的抽象方法不能被private修飾 原因:被private修飾的方法其作用範圍為本類,如果抽象類中的抽象方法被private修飾就意味著該方法永遠無法被實現。

3)抽象類中的抽象方法不能被static修飾 原因:抽象類中的抽象方法如果可以被static修飾就意味著可以使用抽象類的類名來使用該方法,但是該抽象方法沒有方法體,不具有使用的價值,所以Java中規定抽象類中不能包含被static修飾的靜態抽象方法。 例子如

//抽象父類
public abstract class Mammal {
	
	String bian="4567";//抽象類存在構造方法,但是不能用new關鍵字建立物件。
	public abstract void move();//沒有方法體,則為抽象方法,一個類中如果有抽象方法,則該類為抽象類,但是抽象類中可以沒有抽象方法。
	public void eat() {//抽象類不能有final修飾(不能被繼承),抽象方法不能有private(不能被子類訪問)和static(只能有抽象類名呼叫)修飾
		System.out.println("chifan");
	};
}
//繼承抽象父類
public class Bat extends Mammal{
	String bian="2345";
	public void eat() {
		System.out.println("蝙蝠吃蚊子。。。");
	}
	
	public void move() {
		System.out.println("蝙蝠用翅膀移動。。。。");
	}//抽象父類的抽象方法必須被全部重寫,否則該子類也必為抽象類
	
	public static void main(String[] args) {
	    Bat bat = new Bat();
		Mammal mammal = bat;//引用資料型別的自動轉換 父類變數=子類物件,上轉型物件,其不能使用子類新增屬性和方法
		mammal.move();//多型,未呼叫前和呼叫時方法不同,(可有地址進行解釋)(只能在重寫時出現多型,引用資料型別分為編譯時型別(等號左側)和執行時型別(等號右側) 
		System.out.println(mammal.bian);//屬性無多型,方法有多型
		System.out.println(new Bat().bian);
	}
}