C# 快速導覽 - 繼承

繼承 (inheritance) 是一種設計類別 (class) 的機制,使子類別 (subclass) 可以衍生自父類別 (superclass) ,這是說,子類別具有與父類別相同的屬性 (property) 及方法 (method) ,並且子類別還可以額外設定屬性或方法。



舉例如下
class Demo {
    private int a;
    private int b;
    
    public Demo() {
        a = 11;
        b = 22;
    }
    
    public string DoSomething() {
        return "There is no spoon.";
    }
    
    public int DoSomething2() {
        return a + b;
    }
}

class Demo2 : Demo {}

class DemoTest {
    static void Main() {
        Demo2 d = new Demo2();
        System.Console.WriteLine(d.DoSomething());
        System.Console.WriteLine(d.DoSomething2());
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:class12.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


繼承的寫是在子類別後加上冒號,然後是父類別的名稱
class Demo2 : Demo {}


此例的子類別沒有另外設定屬性及方法,注意父類別 Demo 的屬性 ab 都是 private ,這裡是用 public 的方法存取 private 屬性,這是物件導向程式設計的封裝技巧喔!


編譯執行,結果如下



下例示範子類別另訂方法
class Demo {
    protected int a;
    protected int b;
    
    public Demo() {
        a = 11;
        b = 22;
    }
}

class Demo2 : Demo {
    private int c;
    
    public Demo2() {
        c = 33;
    }
    
    public int DoSomething() {
        return a + b + c;
    }
}

class DemoTest {
    static void Main() {
        Demo2 d = new Demo2();
        System.Console.WriteLine(d.DoSomething());
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:class13.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


此例我們在子類別 Demo2DoSomething 使用了父類別的屬性 ab
public int DoSomething() {
    return a + b + c;
}


這裡須注意由於 private 成員無法被繼承,因此 Demoab 已改成 protected
protected int a;
protected int b;


至於子類別的建構子 (constructor) 會先執行父類別的建構子,因此這裡我們只有設定 Demo2 的屬性 c
public Demo2() {
    c = 33;
}


編譯執行,結果如下



中英文術語對照
繼承inheritance
類別class
子類別subclass
父類別superclass
屬性property
方法method
建構子constructor


您可以繼續參考
類別


相關目錄
回 C# 快速導覽
回 C# 教材
回首頁


參考資料
Standard ECMA-334 C# Language Specification
msdn: 繼承 (C# 程式設計手冊)

2 則留言:

Loops 提到...



繼承的寫是在子類別後加上「分號」,然後是父類別的名稱

應該是 「冒號」~

感謝你的教學分享~

Kaiching Chang 提到...

這邊打錯字了,已修改,感謝指正 ^_^