private String name;setName() / getName() (命名規範:set/get + 屬性名首字大寫)public void setName(String name) { this.name = name; }
public String getName() { return name; }
注意:非所有屬性都需 getter/setter,視業務需求決定 (如唯寫的密碼只需 setter)。
extendsclass Student extends Person { ... }
| 規則 | 說明 |
|---|---|
| 單繼承 | 一個類只能繼承一個直接父類 (多層繼承允許) |
| 私有不繼承 | 父類 private 成員不可被子類直接存取 |
| 建構子不繼承 | 但子類建構子會隱式/顯式調用父類建構子 |
| 預設調用父類無參建構子 | 子類實例化時先初始化父類狀態 |
| 跨包 default 不可見 | 子類不同包時無法繼承父類 package-private 成員 |
super.field / super.method()super(args) (必須為建構子第一行)this:this 代表當前對象,super 代表父類引用;this() 調用本類建構子,super() 調用父類建構子;兩者不可共存。| 重寫 | 重載 | |
|---|---|---|
| 前提 | 存在繼承關係 | 同一類中 (或父子類) |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須相同 | 必須不同 (個數/型別/順序) |
| 返回型別 | 子類 ≤ 父類 (共變) | 無限制 |
| 權限修飾符 | 子類 ≥ 父類 | 無限制 |
| 異常 | 子類 ≤ 父類 | 無限制 |
父類引用指向子類物件:Animal a = new Dog();
| 成員類型 | 同名情況下存取到 |
|---|---|
| 非靜態方法 | 子類 (動態綁定) |
| 靜態方法 | 父類 (靜態綁定) |
| 成員變數 (含靜態) | 父類 |
⚠️ 無法存取子類特有成員 (編譯器只認父類型)。需向下轉型:Dog d = (Dog) a;。
abstract class Animal {
String name;
static String color = "動物色";
public abstract void run();
public void eat() { System.out.println("父類 eat"); }
}
class Dog extends Animal {
static String color = "黃色";
public void run() { System.out.println(name + " 四腳奔跑"); }
public void eat() { System.out.println("子類 eat"); }
}
class Fish extends Animal {
public void run() { System.out.println(name + " 游泳"); }
}
public class Demo {
public static void main(String[] args) {
Animal a = new Dog();
a.name = "小黃";
a.run(); // 子類 run
a.eat(); // 子類 eat
System.out.println(a.color); // 父類 color (靜態)
// 多態參數
getArea(new Circle());
getArea(new Rect());
}
static void getArea(Shape s) { s.calculate(); }
}