iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0

本日學習:
類別的繼承

  1. 可保有原先功能並擴展,也不需要再撰寫相同部分
  2. 一個父類別與多個子類別:單一繼承,繼承後子類別會擁有父類別的所有資料成員與函數成員
  3. 子類別不能存取的部分:private 成員(僅可用父類別的函數存取)、建構子、已設定終止繼承的成員
  4. 父類別不能存取的部分:子類別的成員
  5. 繼承的關鍵字:extends,如:class 子類別的成員 extends 父類別名稱{子類別裡的成員}
  6. 例如:
class Circle{
    private static double pi = 3.14;
    private double radius;
    public Circle(){ // 建構子
        System.out.println("Circle() constructor called");
    }
    public void setRadius(double r){
        radius = r;
        System.out.println("radius = " + radius);
    }
    public void show(){
        System.out.printf("area = %6.2f\n", pi * radius * radius);
    }
}
class Coin extends Circle{
    private int value;
    public Coin(){
        System.out.println("Coin() constructor called");
    }
    public void setValue(int t){
        value = t;
        System.out.println("value = " + value);
    }
}
public class Ch19_1 {
    public static void main(String[] args){
        Coin coin = new Coin();
        coin.setRadius(2.0);
        coin.show();
        coin.setValue(5);
    }
}

透過 setRadius()、show() 函數,使子類別可以使用父類別中標示為 private 的 pi、radius
就算沒有寫程式,子類別也會自己呼叫父類別的建構子
7. 如果想要呼叫父類別中特定的建構子:在子類別的建構子中,加入 super(r),引數可改變
- 如果沒有特別呼叫,"沒有引數"的父類別建構子還是會印出
- super() 要寫在第一個敘述
- 如果子類別有建構子且沒有使用 super(),在父類別裡只有「有引數」的建構子,則會被認為編譯錯誤(因為子類別無法呼叫預設的「沒有引數」的父類別建構子)
可透過加上沒有任何敘述的建構子處理:public Circle(){}
8. this() 呼叫同一類別的不同建構子,super() 是由子類別呼叫父類別建構子

保護成員

  1. 開放 private 的權限給子類別
  2. 將 private 改為宣告 protected
  3. 只在父類別、子類別中存取

上一篇
Day 18: 類別(6)
下一篇
Day 20:類別(8)
系列文
從零開始學程式語言:Java 新手修煉記 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言