java學習筆記之—接口和抽象類



一、抽象類

抽象類是“是不是”的概念:例如:一隻鳥是不是動物。
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方法,包外測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章