抽象類和接口


一抽象類

  抽象類(abstractclass):在類中聲明一個方法,這個方法沒有實現體,是一個“空”方法。這樣的類稱為抽象類,在類頭用abstract修飾符表示。

  抽象方法(abstract method):只有方法聲明,而沒有具體方法體的方法。這樣的方法稱為抽象方法。在方法頭用abstract修飾符表示。

  下面以GeometricObject類說明:

 public abstract class GeometricObject { //Data fields, constructors, and partial methods omitted here

   /** Abstract method getArea */
    public abstract double getAreaO; /** Abstract method getPerimeter */ 
    public abstract double getPerimeter(); } public class Circle extends CeometricObject { // omitted 
 } public class Rectangle extends CeometricObject { // omitted 
 } 

  GeometricObject類定義成 Circle 類和 Rectangle 類的父類。GeometricObject 類模擬了幾何對象的共同特征。Circle 類和 Rectangle 類分別包含計算圓和矩形的面積和周長的方法 getArea()和 getPerimeter()。因為可以計算所有幾何對象的面積和周長,所以最好在 GeometricObject類中定義 getArea ()和 getPerimeter() 方法。但是,這些方法不能在 GeometricObject類中實現,因為它們的實現取決於幾何對象的具體類型。所以把GeometricObject類定義成抽象類, getArea()和 getPerimeter()定義成抽象方法。

:1.抽象類不能用new操作符創建它的實例,除此之外和常規類一樣。

  2.包含抽象方法的類一定是抽象類,而抽象類不一定有抽象方法。

  3.子類的父類是具體的,子類也可以是抽象的。

  4.抽象方法必須是非靜態的。

 

二接口

  1.接口:指明相關或者不相關類的多個對象的 共同行為。例如,使用正確的接口,可以指明這些對象是可比較的、可食用的,以及可克隆的。 例如,Java 的Comparable 接口采用下面的語法來定義接口:

// Interface for comparing objects, defined in java.lang package java.lang;
public interface Comparab1e<E> {
  public int compareTo(E o) ;
}

  compareTo 方法判斷這個對象相對於給定對象o的順序,並且當這個對象小於、等於或 大於給定對象 o時,分別返回負整數、0或正整數。 

  2.接口繼承:類和接口之間的關系稱為接口繼承,使用implements關鍵字完成。例如:

abstract class Fruit inplements Edible {     //Data fields, constructors, and methods omitted here } 

  使用 Edible 接口來明確一個對象是否是可食用的,Fruit 類實現了 Edible 接口以表明水果是可食用的。

 

三接口與抽象類

  1.定義

  接口的使用和抽象類的使用基本相似。定義一個接口與抽象類有所不同,如下表:

  2.擴展

  Java 只允許為類的擴展做單一繼承,但是允許使用接口做多重擴展。例如,

  public class NewClass extends Basedass implements Interface1,… ,InterfaceN {

    … 

  }

  3.使用

  接口和抽象類都可以用於為對象指定共同的行為。

  采用類來建模:比較強的 is-a(是一種)關系清晰地描述了父子關系,應該采用類來建模。例如,因為 桔子是一種水果,它們的關系就應該采用類的繼承關系來建模。圓或者矩形是 一個幾何對象,因此 Circle 可以設計為 CeometricObject 的子類。

  使用接口建模:弱的 is-a關系,也稱為 iskind-of(是一類)關系,表明一個對象擁有某種屬性。弱的 is-a 關系可以使用接口建模。例如,所有的字符串都是可以比較的,因此 String 類實現了 Comparable 接口。圓有不同的半徑,並且可以基於半徑進行比較,因此 Circle 可以實現 Comparable 接口。

  接口比抽象類更加靈活,因為一個子類只能繼承一個父類,但是卻可以實現任意個數的接口。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM