java知識點總結(抽象和接口)

一,抽象

抽象類是用於捕捉,抽取子類通用共性的一種類。它只能用作父類,用於提供給子類繼承,不能被實例化。

public abstract class Dog{
	public abstract eat();
}

抽象類用abstract修飾

使用抽象類需要注意幾點:

  • 抽象類不能實例化,實例化的工作交給子類完成,它只需要一個引用即可。
  • 抽象方法必須由子類重寫。
  • 只要包含一個抽象方法的類叫抽象類,不管是否還包含其他方法。
  • 抽象類可以包含具體方法,也可以不包含抽象方法。
  • abstract與final不能修飾同一個類。
  • abstract與final,private,static不能修飾同一個方法。
  • 一個類繼承了抽象類,子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,那麼必須將子類定義爲抽象類,由子類的子類實現子類的抽象方法。
public abstract class Animal{
	public abstract void eat();

}

public class Dog extends Animal{
	
	@Override
	public void eat(){
		System.out.println("狗吃骨頭");
	} 
	public static void main(String args[]){
		
		Dog d = new Dog();
		d.eat;
	}
}

輸出結果:

狗吃骨頭

二,接口

官方定義:接口在java中是一個抽象類型,是抽象方法的集合。一個類通過繼承接口的方式,從而繼承接口的抽象方法。

接口是一個集合,它不是類。接口和抽象一樣不能被實例化,但接口可以使用implements 關鍵字來實現。接口可以有方法和變量,但是接口的變量會隱式地指定爲public static final變量,而方法會隱式地指定爲public abstract。

使用接口需要注意幾點:

  • 接口的所以方法訪問權限都自動被聲明爲public,並且只能是public,如果聲明爲private protectde,編譯會出錯。
  • 在實現多接口的時候一定要避免方法名重複。
  • 在java8以後,接口也可以擁有默認的方法實現,這是因爲不支持默認方法的接口的維護成本太高了。在 Java 8 之前,如果一個接口想要添加新的方法,那麼要修改所有實現了該接口的類。
public interface InterfaceExample{
	public void fun1();
	public void fun2(){
		System.out.println("fun2");
	}

}

public class InterfaceImplementExample implements InterfaceExample{

	 @Override
    public void fun1() {
        System.out.println("fun1");
    }
    public static void main(String args[]){
		
		InterfaceExample ie = new InterfaceImplementExample();
		ie.fun1();
	}

}

三,接口和抽象的區別

  • 從設計層面來看,抽象類提供了IS-A關係,那麼就必須滿足裏式替換原則,,即子類必須能夠替換所以的父類對象。而接口是LIKE-A關係,它只是提供一種方法實現的契約,並不要求接口和接口實現的類提供IS-A關係。
  • 從使用上來看,一個類可以實現多個接口,不能繼承多個抽象類。
  • 接口的變量只能是public static final類型,而抽象則沒有限制。
  • 接口的方法只能是public的,而抽象的方法可以有多種訪問權限。
  • 接口中不能含有靜態代碼塊以及靜態方法,而抽象類可以有靜態代碼塊和靜態方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章