一、抽象類
抽象類是“是不是”的概念:例如:一隻鳥是不是動物。
1、抽象方法
只有方法的聲明,沒有具體的實現
2、含有抽象方法的類是抽象類,但是並非所有的抽象類都必須含有抽象方法。不能用抽象類創建對象(即使該類中不含有抽象方法)。
3、抽象類是爲了繼承而存在的,通過繼承去實現,如果創建了抽象類沒有被繼承則抽象類沒有意義,因爲它自己也不能去創建對象。
4、抽象類也可以擁有成員變量和普通的成員方法。
5、如果一個類繼承了一個抽象類,則子類必須實現父類所有的抽象方法,否則子類也必須被定義爲抽象類。
6、抽象方法必須爲public或者protected,缺省情況下默認的爲public。
二、接口
接口是“有沒有”的概念:例如:鳥能不能飛。
1、Interface 這個關鍵字產生一個完全抽象的類,它根本沒有提供任何具體實現。它允許創建者確定方法名,參數列表和返回類型但是沒有任何方法體。
2、可以在interface前添加public關鍵字,如果不添加,則它只具有包訪問權限。
3、可以在接口中顯示的將方法聲明爲public,但是即使不聲明它們也是public的。
4、當要實現一個接口時,在接口中被定義的方法必須被定義爲public,否則它只能得到默認的包訪問權限,這樣在方法被繼承的過程中,其可訪問權限就被降低了,java編譯器會報錯。
5、接口可以含有變量和方法,接口中的變量會被隱式的定義爲public static final變量,而方法會被隱式地指定爲public abstract方法。一般在接口中不定義變量。接口中的變量必須被顯示初始化。
6、一個非抽象類實現了某接口,則必須實現接口中的所有方法,否則該類必須被定義爲抽象類。
7、一個類可以實現多個接口,間接的實現多繼承。
8、接口中不能含有靜態代碼塊以及靜態方法。
9、接口中沒有構造方法,不能被實例化。
10、一個接口不能實現(implements)另一個接口,但它可以繼承多個其它的接口。
11、接口必須通過類實現他的抽象方法。
代碼實現:
package cn.zjnu.edu.java8yue;
public interface InterfaceTest {
void f();//接口中的方法默認的都是訪問權限
//接口中的方法連個大括號都不讓加的,所以接口中的方法都不能有方法體
public void k();
//int i;不正確,錯誤信息The blank final field i may not have been initialized
int i=1;//正確,接口中的變量是static&final必須被初始化
}
interface InterfaceTest2{
public void g();
}
包外類實現接口:
package cn.zjnu.edu.javase;
import cn.zjnu.edu.java8yue.InterfaceTest;
public class TestInterface implements InterfaceTest{
public void f(){//在實現時,interface中的類必須被定義爲public
System.out.println("在實現時,interface中的方法必須被定義爲public");
}//接口中的默認方法在包外被實現時也是必須被類實現的。
public void k(){
System.out.println("接口中的public方法,包外測試");
}
public static void main(String[] args) {
TestInterface tf=new TestInterface();
tf.f();
tf.k();
}
}
/* class Test3 implements InterfaceTest2{
public void g(){
System.out.println("qwewqewqewqr");
}包外不能實現默認藉口,所以默認接口裏的public方法只能在包內實現
}*/
運行結果:在實現時,interface中的方法必須被定義爲public
接口中的public方法,包外測試