接觸java的時間不是很長,以前對抽象類和介面的定義和區別也是模糊不清,最近拿起學校的教程讀了起來,也參閱了網上的部落格大神理解和總結,於是決定自己按照自己的理解來總結一下。
抽象類(半成品)
一般形式:
protected abstract class person(classname){
......
}
抽象方法:就是用abstract關鍵字宣告的方法。例如:
abstarct void walk(); 這個方法就是一個抽象方法。
這裡我們注意到,這個方法跟一般的方法是不同的,它沒有方法體,亦即是{},我們只需要對其進行宣告,而不去實現它。但是如果我們不實現這個方法,那還宣告幹什麼呢?不是吃飽了沒事幹嗎?其實不然,宣告抽象方法的目的是為了繼承(extends)比 如有兩個類,一個父類,一個子類,在父類中實現這個方法是毫無意義,但是在子類中實現這個方法是必須的,那麼此時就可以把 這樣的方法宣告為抽象方法了。
一般情況下,如果一個類含有抽象方法,那麼這個類就一定是抽象類;但是反之,如果一個類是抽象類,它不一定就有抽象方法。
抽象類和普通類的區別:
大多數的情況下,抽象類和普通類沒什麼區別,比如說同樣擁有成員變數、成員方法以及構造方法,但是和普通類相比還是有以下的幾點不同:
1. 抽象類的宣告時關鍵字必須為 public或者是protected,如果不是這樣,那麼其子類就不能對其進行繼承,既然抽象類不繼承,那還有存在的意義?而且,預設不寫的情況下,其預設的關鍵字是public 。
2 .抽象類裡面不能 new 物件。其原因是這個類是抽象出來的,根本不存在的類,例項化一個根本不存在的東西是沒有意義的。
3 .如果一個類繼承一個抽象類,並且這個類裡面存在抽象方法。那麼子類必須要做到
1)子類一定要對父類的抽象方法進行實現
2 )如果不實現父類的抽象方法,那麼必須要將子類也宣告為抽象類
介面(極端的抽象類)
一般形式:
public interface student(interfacename) {
......
}
和抽象類的存在差不多,也是為了子類的繼承,但是介面的繼承不叫做繼承而是叫做實現,用implements關鍵字代替了extends 關鍵字,而且和繼承不同,介面可以多現,但繼承只能是單繼承。
使用介面時,有以下幾點需要注意:
1. 介面中的定義:
1)公開的常量( public static final )
2)公開的抽象方法(亦即是不能再使用protected)
3)公開的內部類、內部介面
2 .一個類可以實現多個介面,如下,這是允許的。
class A implements X,Y,Z {
}
抽象類和介面的不同:
方 法:抽象類可以包含除開抽象方法外的其他方法,但是介面中只存在抽象方法
變 量:介面中的成員變數的型別都是public static final 型別,但是抽象類的成員變數型別沒有限制。
子類和父類:抽象類的繼承是單繼承,介面的實現是多實現。
靜 態:抽象類可以有靜態方法和程式碼塊,但是介面中不允許存在。
如若有誤,煩請指出,不勝感激!!!