Java中介面和抽象類的學習總結
阿新 • • 發佈:2018-12-31
對於介面和抽象類,自己也不是很清楚,特別是對於其內部的一些約束,總是記不得,所以在此做一定的記錄,供大家學習使用。
在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)的區別