1. 程式人生 > >Java中介面和抽象類的學習總結

Java中介面和抽象類的學習總結

對於介面和抽象類,自己也不是很清楚,特別是對於其內部的一些約束,總是記不得,所以在此做一定的記錄,供大家學習使用。

在java語言中,abstract class和interface是支援抽象類定義的兩種機制。在面向物件的概念中,我們知道所有的物件都是通過類來描繪的,但是反過來卻不是這樣。並不是所有的類都是用來描繪物件的(類具體化),如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。

我們直接從程式碼上來進行解析:

abstract class

abstract class Animal{
    // 表示該動物有多少條腿,注意可以是私有的
// 當然,這裡只是演示用 private int legs; public abstract void move(); public void eat(){ System.out.println("吃東西"); } } class Fish extends Animal{ // 實現抽象類中的抽象方法,不實現就會報錯 public void move(){ System.out.println("游泳"); } } class Rabbit extends Animal{ // 實現抽象類中的抽象方法,不實現就會報錯
public void move(){ System.out.println("跳"); } }

在這裡,我們定義抽象類需要遵循以下幾條規則:

  • 一個類如果包含抽象方法,那麼這個類就必須宣告為abstract,而且不能使private的(要不然子類怎麼繼承啊)
  • 抽象類中可以沒有抽象方法
  • 抽象類無法建立例項,只能被繼承
  • 非抽象類繼承抽象類,就必須實現抽象類中的所有抽象方法
  • 抽象類可以繼承抽象類,可以不重寫父類的方法

interface

介面和抽象類很類似,介面是抽象方法的集合,用interface來宣告。

  • 介面不能用於例項化物件。
  • 介面沒有構造方法。
  • 介面中所有方法都必須是抽象的。
  • 介面不能包含成員變數,除了 static 和 final 變數。
  • 介面不是被繼承,而是需要被類實現,使用implements。
  • 通過介面,我們可以實現多繼承。

程式碼示例

interface AttackWay{
    // 注意,抽象方法不能有方法體
    void attack();
}

interface MoveWay{
    void move();
} 

class Person implements AttackWay,MoveWay{
    public void attack(){
        System.out.println("使用拳頭攻擊");
    }
    public void move(){
        System.out.println("使用腳攻擊");
    }
}

至於這二者系統的區別,我覺得有一張圖很不錯,貼在下面:

介面和抽象類的區別

參照了網上的部分部落格,發現有一篇總結的很好,在此推薦給大家。
java中介面(interface)和虛基類(abstract class)的區別