淺談Java抽象類

MikealHu發表於2018-11-23

##抽象類
####1、抽象類和抽象方法簡述
#####1、抽象類和抽象方法語法
抽象類和抽象方法必須要用abstract修飾符修飾
例如:

抽象類:
public abstract class Person {
	//程式碼
}
抽象方法:
public abstract void print();

#####1、抽象類和抽象方法關係
抽象類不一定有抽象方法,但是有抽象方法的要麼是抽象類,要麼是介面。說明:一個類中如果有抽象方法、那麼這個類一定要宣告為抽象類。
####2、例項化問題
抽象類可以有自己的構造方法,但是不能直接通過new進行例項化但不能說是抽象類就無法例項化。
抽象類其實是可以例項化的,但是它的例項化是通過父類的引用來指向子類的例項,來間接地實現父類的例項化(因為子類要例項化前,一定會先例項化他的父類。這樣建立了繼承抽象類的子類的物件,也就把其父類(抽象類)給例項化了)。
####3、子類
兩種情況:要麼子類本身就是一個抽象類、要麼子類重寫了抽象類中的所有抽象方法。
####4、成員特點
①成員變數:抽象類中既可以是變數也可以是常量,但是abstract不能修飾成員變數。②構造方法:既可以有無參構造方法,也可以有有參構造方法;作用:用於子類訪問父類資料的初始化。舉例如下:

public abstract class Person {
private String name;
// 程式碼
public Person() {
	super();
}

public Person(String name) {
	super();
	this.name = name;
}

public abstract void print();
}

③:成員方法:既可以是抽象方法,也可以是非抽象方法。
####問題
1、abstract不能和哪些關鍵字共存?
1)abstract 和 static 不能共存:
被abstratc修飾的抽象方法是沒有方法體的;而被static修飾的方法是可以用類名直接去呼叫的,用類名呼叫抽象方法是沒有意義的。
2)abstract 和 final 不能共存:
被abstract修飾的方法是強制子類重寫的;而被final修飾的方法是不能被子類重寫的,自相矛盾;
3)abstract 和 private
被abstract修飾的方法是強制子類重寫的;而被private修飾的方法是不能被子類重寫的,自相矛盾

相關文章