// 父類
class Animal {
private String name;
private String type;
public Animal(String name, String type) {
this.name = name;
this.type = type;
}
public void voice() { System.out.println(name + " 發出聲音"); }
public void eat() { System.out.println(name + " 進食中"); }
public String getName() { return name; }
}
// 子類 1:貓
class Cat extends Animal {
private String furColor; // 新增成員
public Cat(String name, String furColor) {
super(name, "貓科");
this.furColor = furColor;
}
@Override
public void voice() { System.out.println(getName() + " 喵喵叫"); } // 重寫
public void catchMouse() { System.out.println(getName() + " 捉老鼠"); } // 新增方法
}
// 子類 2:狗
class Dog extends Animal {
private String gender;
public Dog(String name, String gender) {
super(name, "犬科");
this.gender = gender;
}
@Override
public void voice() { System.out.println(getName() + " 汪汪叫"); }
public void guideBlind() { System.out.println(getName() + " 做導盲犬"); }
}
// 子類 3:大象
class Elephant extends Animal {
private String birthPlace;
public Elephant(String name, String birthPlace) {
super(name, "象科");
this.birthPlace = birthPlace;
}
@Override
public void voice() { System.out.println(getName() + " 嗷嗷叫"); }
public void playWater() { System.out.println(getName() + " 在戲水"); }
}
// 多態測試方法
public void testPolymorphism(Animal a) {
a.voice(); // 動態綁定,調用子類重寫方法
a.eat();
}
// 主程序
public static void main(String[] args) {
Animal cat = new Cat("咪咪", "白色");
Animal dog = new Dog("旺財", "公");
Animal elephant = new Elephant("大象", "非洲");
// 1. 子類對象調用父類與自身方法
((Cat)cat).catchMouse();
((Dog)dog).guideBlind();
((Elephant)elephant).playWater();
// 2. 父類引用實現多態
testPolymorphism(cat);
testPolymorphism(dog);
testPolymorphism(elephant);
}
| 概念 | 代碼體現 |
|---|---|
| 封裝 | 父類成員私有,提供公共 getter |
| 繼承 | extends Animal 復用屬性與方法 |
| 多態 | 父類引用指向子類對象,調用重寫方法 |
| 方法重寫 | 三個子類均重寫 voice() |
| 向上轉型 | Animal cat = new Cat(...) |
| 向下轉型 | ((Cat)cat).catchMouse() 調用子類專有方法 |
@Override 註解,觀察編譯器不報錯但運行行為不變(註解僅作檢查)。voice() 為抽象方法。此例完整覆蓋繼承、封裝、多態核心考點,是 Java 面向對象基礎的經典練習模板。