抽象:
抽象類不能被實例化(初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。
抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。
構造方法,類方法(用 static 修飾的方法)不能聲明為抽象方法。
抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。
抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為:
//擁有抽象方法,類也必須是抽象類。但并不意味著抽象類智能有抽象方法,也可也有普通方法
//因為抽象類中含有無具體實現的方法,所以不能用抽象類創建對象
public abstract abstractTest{
abstract void fun();
}
1、抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認為public。
2、抽象類不能用來創建對象;
3、如果一個類繼承于一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。在其他方面,抽象類和普通的類并沒有區別。
接口:
接口泛指供別人調用的方法或者函數。從這里,我們可以體會到Java語言設計者的初衷,它是對行為的抽象。在Java中,定一個接口的形式如下:
public interface interfaceTest(){
}
接口中可以含有 變量和方法。但是要注意,接口中的變量會被隱式地指定為public static final變量(并且只能是public static final變量,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤),并且接口中所有的方法不能有具體的實現,也就是說,接口中的方法必須都是抽象方法。從這里可以隱約看出接口和抽象類的區別,接口是一種極度抽象的類型,它比抽象類更加“抽象”,并且一般情況下不在接口中定義變量。