一、抽象類別
我們知道,物件是透過類別來產生的,但是並非所有的類別都可以描述特定的物件。
如果一個類別中不包含足夠的資訊來描述特定的對象,就成為了抽象類別。抽象類別是對一類有著相同特徵,但細節上卻有著不同表現的物件的抽象。例如,鳥類都會叫,但是不同的鳥叫法一定是不同的,可以抽像出「叫」這個概念。
定義下面一個鳥類:
public abstract class Bird { private String color; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Bird(){ } public abstract void sing();//鸣叫 } //喜鹊 class Magpie extends Bird{ public void sing() { System.out.println("I can sing in a whisper. "); } }
抽象類別特徵:
(1)抽象類別用abstract關鍵字修飾
(2)抽象類別中的抽象方法用abstract進行修飾,沒有方法(
(2)抽象類別中的抽象方法用abstract實現具體方法(具體方法)。 (3)抽象類別可以包含非抽象方法(4)抽象類別可以不包含抽象方法(設計成抽象類別就沒什麼意義了吧。。。),但包含抽象方法的類別一定是抽象類別(5)抽象類別本質也是類,只能單繼承(6)抽象類別不能實例化,不能new。我們前面說它不描述特定的對象,肯定也不能實例化了(7)抽象類別可以有實例變數和建構方法 二、介面 介面是一組方法特徵的集合,是介面 介面是一組方法特徵的集合,是介面 介面是一組方法特徵的集合,是介面 介面是一組方法特徵的集合,是介面 介面是一組方法特徵的集合,是介面 契約,規定了你可以做什麼。軟體設計過程中要依賴抽象,而非具體實作。 像我們電腦上的usb接口,無論你是硬碟、u盤、還是手機,只要你實現了usb規定的接口,便能夠聯通電腦。 上面抽象類別的例子中,我想加入一個「飛」的功能,考慮到並非所有的鳥都會飛,例如:企鵝,鴕鳥,鴨子等等,該怎麼辦呢? 修改抽象類別肯定是不合適的:1.違反開閉原則,2:會使得所有的子類別都繼承到「飛」這一功能,我們會看到滿天的鴨子在飛了^_^ 。 我們可以定義下面一個介面:
public interface IFly { void fly(); }
class Magpie extends Bird implements IFly { public void sing() { System.out.println("I can sing in a whisper. "); } public void fly(){ System.out.println("我会飞了!"); } }
(2)關鍵字:interface
。
(4)介面中的方法預設都是public abstract的,實作類別中必須使用public修飾。
(5)介面中的所有方法都必須在實作類別(抽象類別除外)中實作。
(6)介面中的變數預設為public static final的。
(7)一個類別可以實現多個介面。
三、應用場景