return super.父類方法(); // 是什麼意思?
return super.子類構造方法(); // 合法嗎?
return super.方法(); // 通用含義
super.方法()表示 **調用父類中被覆寫/繼承的同名方法**,並將其返回值作為當前方法的返回值。**僅此而已,無特殊魔法。**
| 場景 | 語法 | 含義 | 合法性 |
|---|---|---|---|
| 調用父類普通方法 | `return super.doSomething();` | 執行父類邏輯,透傳返回值。常用於擴展父類功能: `public Result do() { log(); return super.do(); }` | ✅ 標準用法 |
| 調用父類構造器 | `super(param);` | **只能在子類構造器第一行**,初始化父類部分狀態。**無返回值,不能寫 `return super(...);`** | ❌ `return super.構造器()` 非法 |
| 調用父類靜態方法 | `return ParentClass.staticMethod();` | 靜態方法屬於類,**不存在多態**,`super.staticMethod()` 編譯錯誤。需用類名調用。 | ❌ `super.靜態方法()` 非法 |
abstract class AbstractParser {
public final String parse(String input) { // 模板方法
String cleaned = clean(input);
String result = doParse(cleaned); // 子類實現
return postProcess(result);
}
protected String clean(String s) { return s.trim(); }
protected abstract String doParse(String s);
protected String postProcess(String s) { return s; }
}
class JsonParser extends AbstractParser {
@Override
protected String doParse(String s) {
// 子類核心邏輯
return new JSONObject(s).toString();
}
@Override
protected String postProcess(String s) {
return super.postProcess(s) + " [JSON]"; // 擴展父類後處理
}
}
return super.method()= 「委託給父類實現,我負責透傳結果」。理解「調用鏈向上、返回值向下」的雙向流動,是掌握繼承復用與模板方法模式的鑰匙。