Java之抽象(abstract)類、介面(interface)的用法總結
導讀:
1、什麼是抽象類(abstract)?
2、如何定義抽象類(abstract)?
3、抽象類(abstract)的作用?
4、何為介面?介面和類的區別?
5、怎麼區分抽象類和介面?
1、抽象類的定義:
Java中宣告一個類時,可以不給出該類的所有實現細節。然後再定義一個或者多個子類繼承抽象父類,重用
父類中的程式碼、擴充並實現其未實現的功能。2、定義抽象方法的規則:
(1)只給出方法的頭部(包括方法名、形式引數列表、返回值型別及修飾符),而不給出方法體。
(2)抽象方法必須使用abstract關鍵字修飾,且包含抽象方法的類也必須宣告為抽象類。
注:a、不包含抽象方法的類也可以宣告為抽象類。
b、抽象類不能被例項化,即不允許建立抽象類的物件。如下例中不能new Animal(),否則會報錯。
c、子類必須實現其父類中的所有抽象方法否則該子類只能宣告為抽象類。
d、父類不是抽象類,但是子類中可以新增抽象方法,此時子類必須宣告為抽象類,因此也不允許例項化。
e、抽象類中可以宣告static屬性和方法。
3、抽象類的作用:
(1)程式碼重用:子類可以重用抽象父類中的屬性和非抽象方法;
(2)規劃:子類中通過抽象方法的重寫來實現父類中規劃的功能。
public abstract class Animal { private int age ; public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public abstract void sleep(); } public class Person extends Animal{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return name; } public void sleep(){ System.out.println("人可以睡覺。"); } } public class Cat extends Animal{ public void sleep(){ System.out.println("貓也可以睡覺。"); } public void catchMouse(){ System.out.println("貓還可以抓老鼠。"); } } public class Test{ public static void main (String[] args){ Animal a = new Person(); a.setAge(18); a.sleep(); } }
程式執行輸出結果為:
人可以睡覺。
4、介面:
可以理解為是一種極端的抽象類。該類中只有常量和抽象方法的定義,而不提供變數和方法的實現。
4.1、介面和類的區別:
介面中定義的屬性必須是public abstract的,而介面中的方法則必須也是public abstract。
介面可以被多個類實現,而且必須實現介面中的所有抽象方法,否則只能宣告為抽象類。
介面可以多重實現,即一個介面可以同時實現多個介面。
介面也可以多重繼承,實現多型機制。
5、抽象類和介面的異同點:
同:都是不斷向上抽象而來。
異:(1)抽象類需要被繼承,而且只能單繼承;
介面需要被實現,而且可以多實現。
(2)抽象類中可以定義抽象方法和非抽象方法,子類繼承後,可以直接使用非抽象方法;
介面中只能定義抽象方法,必須由子類去實現。