類的聲明與修飾符
[public] [abstract | final] class ClassName [extends Parent] [implements Interface...] { ... }
| 修飾符 | 含義 |
| public | 任意處可見,文件名必須一致 |
| abstract | 不可實例化,含抽象方法或設計為被繼承 |
| final | 不可被繼承,如 String、Integer |
| (package-private) | 同包可見,無修飾符 |
實例化與靜態成員
MyClass obj = new MyClass(); // 實例
MyClass.staticMethod(); // 靜態方法屬於類,無需實例
// 靜態方法只能訪問靜態字段(System.out 例外)
繼承機制
public class Child extends Parent { ... }
- 子類繼承父類非私有字段/方法。
- 單繼承:一個類只能有一個直接父類。
super 調用父構造器/方法,this 區分同名字段/調用本類構造器。
包機制
package com.company.project.module; // 必須為文件第一行非註釋語句
- 目錄結構對應包層級:
src/com/company/project/module/MyClass.java
- 導入:
import com.company.project.module.*; 或 import com.company.project.module.MyClass;
- 避免
.* 導入:防止同名類衝突、減少編譯掃描、明確依賴。
完整示例:工具類與包結構
package mypack;
public class Tools {
/** 替換字符串中所有目標子串 */
public String replaceAll(String source, String target, String replacement) {
if (source == null || target == null || target.isEmpty()) return source;
StringBuilder sb = new StringBuilder();
int idx = 0, pos;
while ((pos = source.indexOf(target, idx)) != -1) {
sb.append(source, idx, pos).append(replacement);
idx = pos + target.length();
}
sb.append(source.substring(idx));
return sb.toString();
}
public static void main(String[] args) {
Tools t = new Tools();
System.out.println(t.replaceAll("abcd", "b", "d")); // adcd
}
}
接口核心規則
- 默認
public abstract 方法,JDK 8+ 支援 default/static/private 方法。
- 字段隱式
public static final(常量)。
- 類通過
implements 實現多個接口,實現多態替換。
- 接口可繼承接口(
extends),形成契約層級。
訪問控制矩陣
| public | protected | package | private |
| 同類 | ✓ | ✓ | ✓ | ✓ |
| 同包子類 | ✓ | ✓ | ✓ | ✗ |
| 同包非子類 | ✓ | ✓ | ✓ | ✗ |
| 異包子類 | ✓ | ✓ | ✗ | ✗ |
| 異包非子類 | ✓ | ✗ | ✗ | ✗ |
設計原則
- 高內聚低耦合:單一職責類,接口定義契約。
- 優先組合,繼承慎用(IS-A 驗證)。
- 依賴倒置:高層模組依賴抽象(接口),不依賴具體實現。