接口和抽象類的作用

    接口是一個只有方法的定義,沒有方法的實現。一個接口通常被一個或多個類implement。

    在大部分java的web開發中,很多行爲實現都是和數據庫有關的。也就是說行爲的目的一樣(操作數據,而實現方法是不同的,這種情況就體現了我們接口的作用了。

public interface UserDAO
{}
類(行爲的實現)
public class UserDAODBImp implements UserDAO
{}
public class UserDAOImp implements UserDAO
{}
工廠類(創建一個對象)
public class ClassFactory
{
	public static UserDAO getUserDAO()
	{
		return new UserDAODBImp();
	}
}
  1. abstract class 在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface。這彌補了類的多繼承問題。
  2. 在abstract class中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中一般不定義數據成員),所有的成員方法都是abstract的。
  3. abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。 注意:當一個行爲與一個類的所屬行爲方法不相關聯時,應該採用接口來實現這個行爲,不能使用抽象類,否則違反面向對象的ISP(Interface Segregation Principle)規則和OCP原則。
  4. 實現抽象類和接口的類必須實現其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現方法。
  5. 接口中定義的變量默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。當然,變量定義也可以是friendly.
  6. 抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
  7. 接口中的方法默認都是 public,abstract 類型的。

       Abstract(抽象)可以修飾類、方法,如果將一個類設置爲abstract,則此類必須被繼承使用。此類不可生成對象,必須被繼承使用。
       Abstract雖然不能生成對象,但是可以聲明,作爲編譯時類型,但不能作爲運行時類型。
       Final和abstract永遠不會同時出現。
       當abstract用於修飾方法時,此時該方法爲抽象方法,此時方法不需要實現,實現留給子類覆蓋,子類覆蓋該方法之後方法才能夠生效
           private void print(){};此語句表示方法的空實現。
           Abstract void print(); 此語句表示方法的抽象,無實現。
       如果一個類中有一個抽象方法,那麼這個類一定爲一個抽象類。反之,如果一個類爲抽象類,那麼其中可能有非抽象的方法。
       如果讓一個非抽象類繼承一個含抽象方法的抽象類,則編譯時會發生錯誤。因爲當一個非抽象類繼承一個抽象方法的時候,本着只有一個類中有一個抽象方法,那麼這個類必須爲抽象類的原則。這個類必須爲抽象類,這與此類爲非抽象衝突,所以報錯。所以子類的方法必須覆蓋父類的抽象方法。方法才能夠起作用。
       接口是一種特殊的抽象類。一個類實現接口,相當於它繼承一個抽象類。類必須實現接口中的方法,否則其爲一抽象類。

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