public class Bird {
private String name;
public Bird() {}
public Bird(String name){ this.name = name; }
// getter/setter...
}
public class Chicken extends Bird {
private String crest;
public Chicken(){ super(); }
public Chicken(String name, String crest) {
super(name); // 呼叫父類有參建構子
this.name = name; // 注意:這行重複,super(name) 已設定 name
}
}
關鍵規則:
super() 必須寫在子類建構子第一行。super(name) 對應父類 Bird(String name);super() 對應 Bird()。long/double 除外,JVM 1.2+ 已保證原子性)。n++、n = n + 1 非原子,需配合 synchronized 或 AtomicInteger。synchronized,但功能較弱。wait/notify 協作機制。| 場景 | 推薦 |
|---|---|
| 單一變數狀態標記、單次賦值 | volatile |
| 複合操作(檢查-執行)、多變數不變式 | synchronized / Lock |
| 已在同步區塊內、或常量 | 無需 volatile |
synchronized 鎖失敗的執行緒在此等待。wait() 釋放鎖並進入等待;notify() 隨機喚醒一個到鎖池,notifyAll() 喚醒全部。// 物件 1 的方法
synchronized(a) { synchronized(b) { ... } }
// 物件 2 的方法 —— 必須相同順序
synchronized(a) { synchronized(b) { ... } }
使用 wait()/notifyAll() 協調緩衝區滿/空狀態,注意必須在 synchronized 區塊內呼叫。
InputStream/OutputStream 為抽象父類;實作類含 FileInputStream、BufferedInputStream、DataInputStream、PipedInputStream 等。Reader/Writer 為抽象父類;實作類含 FileReader、BufferedReader、StringReader、InputStreamReader(橋接器)等。InputStream、ReaderOutputStream、Writersuper()(養成寫無參建構子習慣)。super(參數)。