1. 程式人生 > >013_面向對象_抽象類和接口

013_面向對象_抽象類和接口

引用 抽取 接口 避免 抽象類 tar blog 實例化 public

1.抽象類(abstract)

  (1)特點

    ①方法只有聲明沒有實現時,該方法就是抽象方法,抽象方法必須定義到抽象類中,該類也必須被abstract修飾

    ②抽象類不可以被實例化,因為調用抽象方法沒有意義。
    ③抽象類必須有子類覆蓋所有的抽象方法,該子類才可以實例化,否則,這個子類還是抽象類

  (2)常見問題

    ①抽象類中有構造函數嗎?

      有,用來給子類對象初始化
    ②抽象類可以不定義抽象方法嗎?
      可以。目的是不讓該類創建對象,通常這個類中的方法有方法體,卻沒有內容
    ③抽象關鍵字不可以和哪些關鍵字共存?
      private,static,final
    ④抽象類和一般類的異同
      相同:都是用來描述事物的,都在內部定義了成員
      異同:a.一般類中有足夠的信息描述事物,抽象類描述事物的信息可能不足
         b.一般類中不能定義抽象方法抽象類可以定義抽象方法,同時也可以定義非抽象方法
         c.一般類可以被實例化,抽象類不可以被實例化

2.接口(interface)

  接口,在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法(http://www.runoob.com/java/java-interfaces.html)

  (1)固定的修飾符

    ①全局常量:public static final

    ②抽象方法:public abstract

  (2)特點

    ①一個類可以實現多個接口,而且在繼承另一個類的同時,還可以實現多個接口。

    ②接口的出現避免了單繼承的局限性,接口與接口之間是繼承關系,而且接口可以多繼承。

  (3)抽象類和接口的異同

    ①相同點:

       都是不斷向上抽取而來的
    ②不同點:
      a.抽象類需要繼承,而且只能單繼承
       接口需要被實現,而且可以多實現

      b.抽象類中可以定義抽象方法和非抽象方法,子類繼承後,可以直接使用非抽象方法
       接口中只能定義抽象方法,必須由子類去實現

      c.抽象類的繼承,是 is 關系,在定義該體系的基本共性內容。
       接口的實現是 like 關系,在定義體系額外功能。

  (4)接口的應用:

    接口類型的引用,用於接受(指向)接口的子類對象。

  

013_面向對象_抽象類和接口