Java抽象類和介面 小白版

椰椰210162701037發表於2024-08-14

什麼是抽象

抽象就是從多個事物中將共性的,本質的內容抽象出來。

什麼是抽象類

Java語言中,用abstract關鍵字修飾的類叫作抽象類。類本身是不存在的,所以抽象類無法建立物件無法例項化。

在物件導向領域,抽象類主要用來進行型別隱藏。

什麼是抽象方法

抽象類中用關鍵字abstract修飾的方法叫做抽象方法(只有宣告,沒有方法體)

例:

public abstract class Car{ //抽象類
    public abstract void start(); //抽象方法
}

抽象類的好處

  1. 可以複用程式碼

  2. 利用多型隱藏實現類型別,得到更高的靈活性

抽象類的特點

  1. 抽象類,其修飾符必須為public或者protected,不能是private,因為建立抽象類,就是要被其他類繼承;
  2. 抽象類不能例項化物件,要透過其普通子類進行例項化;
  3. 普通類繼承抽象類,則該普通類一定要重寫父類的抽象方法;
  4. 即使不包括任何abstract方法,亦可將一個類宣告成抽象類;
  5. 抽象類中可以沒有抽象方法,但是,有抽象方法的類必須是抽象類。

抽象類和具體類的區別

抽象類只有方法的宣告,沒有方法體(具體實現),所以抽象類不能例項化物件;

具體類所有的方法包含方法的宣告和方法體,所以具體類可以例項化物件。

例項

abstract class Door {

    public int weight;

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public abstract void open();
    public abstract void close();
}
class WoodenDoor extends Door{
    public void open(){
        System.out.println("Opening wooden door");
    }
    public void close(){
        System.out.println("Closing wooden door");
    }
}
class IronDoor extends Door{
    public void open(){
        System.out.println("Opening iron door");
    }
    public void close(){
        System.out.println("Closing iron door");
    }
}
public class Main{
    public static void main(String[] args) {
        Door door = new WoodenDoor();//向上型別轉換(多型)
        door.open();
        door.close();
        door.setWeight(10);
        System.out.println(door.getWeight());

        door = new IronDoor();
        door.open();
        door.close();
    }
}

什麼是介面

介面是一套規範或標準。介面只規定必須實現的功能或要求,但是沒有規定如何實現或達到。介面通常用 interface 來宣告。

介面的定義格式

interface 介面名{
    介面方法
}
  • 介面間多繼承格式
interface 介面名 extends 介面名1,介面名2,...{
    ...
}

介面的作用

對外提供統一的介面方法,隱藏介面方法的實現細節。

介面的特點

  1. Java8之前所有介面方法都是抽象方法(只有方法宣告,沒有方法實現),
    Java8及以後的版本中,介面可以包含除了抽象方法以外的其他型別的方法,如預設方法、靜態方法。
  2. 介面不能例項化物件,但類可以使用implements 關鍵字實現介面(一個類可以實現多個介面)
  3. 類實現介面必須實現所有介面方法(否則這個類必須定義成抽象類)
  4. 介面中可以定義靜態成員變數(但必須用 final 修飾,即變數值不能更改)
  5. 介面中的方法是不能在介面中實現的,只能由實現這個介面的類來實現介面中的方法,介面中的方法都是公有的。
  6. 一個介面不能繼承其他類,但是可以繼承別的介面。

介面的優點

  1. 介面可以用來對類提供規範或標準(避免類在設計上的不一致性)
  2. 介面可用於間接實現多重繼承(使用介面為實現類新增額外功能)
  3. 介面可以使設計與實現相分離(降低程式碼耦合度、保證程式碼安全性)

例項

//TypeC介面
interface TypeC {
    final int MAX_VOLTAGE = 5; //常量
    void methodA();
    void methodB();
}
abstract class Phone {
    void charge(){
        System.out.println("charge");
    }

    void play(){
        System.out.println("play");
    }
}
//小米手機支援TypeC介面
class XiaoMi extends Phone implements TypeC {
    @Override
    public void methodA() {
        System.out.println("methodA");
    }

    @Override
    public void methodB() {
        System.out.println("methodB");
    }
}
//華為手機支援TypeC介面
class HuaWei extends Phone implements TypeC {
    @Override
    public void methodA() {
    }

    @Override
    public void methodB() {
    }
}

public class Client {
    public static void main(String[] args) {
        Phone phone = new XiaoMi();
        phone.charge();
        phone.play();

        XiaoMi xiaomi =new XiaoMi();
        xiaomi.methodA(); //不靈活

        TypeC typeC = new XiaoMi(); //隱藏了具體實現,提高了靈活性
        typeC.methodA(); //更加靈活

        typeC = new HuaWei();
        typeC.methodA();
        typeC.methodB();
    }
}

相關文章