首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 抽象類與抽象方法深度解析:定義規則、繼承實現與多態應用

     編輯:Java 相關知識

核心概念

  • 抽象類:用 abstract 修飾的類,不能實例化,作為子類公共模板
  • 抽象方法:只有聲明無實現的方法,子類必須重寫(除非子類也是抽象類)

語法規則

  1. 含抽象方法的類必須聲明為抽象類
  2. 抽象類可包含 0 個或多個抽象方法,也可包含普通方法
  3. 抽象方法不能用 private、static、final、native 修飾
  4. 抽象類不能用 final 修飾
  5. 子類繼承抽象類必須實現所有抽象方法,否則子類也必須聲明為抽象類

完整代碼案例:動物叫聲

abstract class Animal {
    String name;
    Animal(String name) { this.name = name; }
    public abstract void enjoy(); // 抽象方法
}
abstract class Cat extends Animal {
    String eyeColor;
    Cat(String n, String c) { super(n); this.eyeColor = c; }
    // 不實現 enjoy(),繼續聲明為抽象類
}
class BlueCat extends Cat {
    BlueCat(String n, String c) { super(n, c); }
    @Override public void enjoy() { System.out.println("藍貓叫..."); }
}
class Dog extends Animal {
    String furColor;
    Dog(String n, String c) { super(n); this.furColor = c; }
    @Override public void enjoy() { System.out.println("狗叫...."); }
}
public class TestAbstract {
    public static void main(String[] args) {
        // Cat c = new Cat("Cat","blue"); // 編譯錯誤:抽象類不能實例化
        Dog d = new Dog("dog","black");
        d.enjoy(); // 狗叫....
        BlueCat bc = new BlueCat("blueCat","blue");
        bc.enjoy(); // 藍貓叫...
    }
}

設計模式應用:模板方法模式

abstract class DataProcessor {
    // 模板方法:定義算法骨架
    public final void process() {
        readData();
        handleData();
        writeData();
    }
    protected abstract void readData();
    protected abstract void handleData();
    protected abstract void writeData();
}
class XmlProcessor extends DataProcessor {
    @Override protected void readData() { /* XML 解析 */ }
    @Override protected void handleData() { /* 業務邏輯 */ }
    @Override protected void writeData() { /* XML 生成 */ }
}

抽象類 vs 接口

特性抽象類接口
構造方法有無
成員變量任意隱式 public static final
方法默認實現可有Java 8+ default 方法
繼承/實現單繼承多實現
適用場景強關聯、共享代碼弱關聯、能力定義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved