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

面向接口編程:從「類型思維」到「能力思維」的範式轉換

     編輯:Java 綜合教學

數據類型思維的局限

傳統 OOP 強調「對象屬於某類型」,操作針對類型。但現實中我們更關心對象具備什麼能力:

  • 拍照:手機、相機、平板皆可,關鍵是「有拍照能力」
  • 計算:人腦、算盤、計算器、電腦皆可,關鍵是「有計算能力」
  • 加熱:電磁爐、燃氣灶、熱水壺皆可,關鍵是「有加熱能力」

結論:類型不重要,能力才重要。Java 用接口表示能力。

接口核心概念

生活類比:USB 接口

  • 電腦(使用方)依賴 USB 協議(接口)
  • 鍵盤、鼠標、U盤(實現方)實現 USB 協議
  • 雙方互不依賴具體類,僅通過接口交互

Java 接口定義與實現

// 定義能力
public interface MyComparable {
    int compareTo(Object other); // -1/0/1
}

// 實現能力
public class Point implements MyComparable {
    private int x, y;
    public Point(int x, int y) { this.x=x; this.y=y; }
    public double distance() { return Math.sqrt(x*x+y*y); }
    @Override
    public int compareTo(Object other) {
        if(!(other instanceof Point)) throw new IllegalArgumentException();
        Point p = (Point)other;
        double d = distance() - p.distance();
        return d<0?-1 : d>0?1 : 0;
    }
}

面向接口編程(使用接口類型引用實現類對象)

MyComparable p1 = new Point(2,3);
MyComparable p2 = new Point(1,2);
System.out.println(p1.compareTo(p2)); // 1

// 通用工具類,不知具體類型,只依賴接口
public class CompUtil {
    public static Object max(MyComparable[] objs) { ... }
    public static void sort(MyComparable[] objs) { ... }
}

// 調用
Point[] points = {new Point(2,3), new Point(3,4), new Point(1,2)};
CompUtil.sort(points); // [(1,2), (2,3), (3,4)]

接口進階細節

  • 接口變量:隱含 public static final,本質是常量
  • 接口繼承:interface C extends A, B,支援多繼承
  • 類繼承+實現:class C extends Base implements I1, I2,extends 在前
  • instanceof:判斷對象是否實現某接口

組合 + 接口 = 替代繼承的最佳實踐

繼承提供代碼復用+多態,但破壞封裝、耦合強。
組合復用代碼但無多態。
接口提供多態,組合復用代碼,兩者結合兼得兩全:

interface IAdd { void add(int n); void addAll(int[] ns); }
class Base implements IAdd { ... } // 復用邏輯
class Child implements IAdd {      // 組合 Base 或獨立實現
    private Base base = new Base();
    public void add(int n) { base.add(n); }
    public void addAll(int[] ns) { base.addAll(ns); }
}

小結

「面向接口編程」是分解複雜問題、降低耦合、提升靈活性的核心工具。它將「是什麼」(類型)轉為「能做什麼」(能力),更貼近領域本質。下一步將探討介於接口與類之間的抽象類。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved