繼承是物件導向的重要觀念之一,讓我們來講講它

先說它的語法

class student
{
    public string firstName;
    public string lastName;

    public void printFullName()
    {
        Console.WriteLine(firstName + " " + lastName);
    }
}

class forignStudent : student
{
    public string passportIDNumber;
}

像黃色區塊就是繼承的語法,forignStudent這個class繼承student,中間用colon冒號來隔開.

繼承的意思就是forignStudent除了自己宣告的passportIDNumber外,也會同時擁有student宣告的firstName,lastName及printFullName的方法.

所以當我們實例化forignStudent時,也就能同時使用firstName,lastName及printFullName,如下例

static void Main()
{
    forignStudent f1 = new forignStudent();
    f1.firstName = "Good";
    f1.lastName = "Man";
    f1.passportIDNumber = "1234567";
    f1.printFullName();
 }

這裡要注意的是,student裡要被繼承的成員要加上public的存取控制,不然是無法使用的

接下來要說明的是子類實例化時,父類的建構式也會執行

class student
{
   public student()
    {
        Console.WriteLine("student class");
    }
}

class forignStudent : student
{
    public forignStudent()
    {
        Console.WriteLine("forignStudent class");
    }
}

class Program
{
    static void Main()
    {
        forignStudent f1 = new forignStudent();
        Console.ReadKey();
    }
}

上例你會得到結果是

student class
forignStudent class

表示雖然我們是實例化forignStudent,但是因為它是繼承自student,所以student的建構式也會一併被執行

既然會執行base,那我們就有辦法來選擇執行那個base,例子如下

class student
{
   public student()
    {
        Console.WriteLine("student class");
    }
   public student(string className)
   {
       Console.WriteLine("student class with className");
   }
}

class forignStudent : student
{
    public forignStudent() : base("class A") 
    {
        Console.WriteLine("forignStudent class");
    }
}

上例student有二個建構式,一個無參數,另一個是有一個string參數,而在forignStudent的建構式宣告時,有特別指定使用父類string參數的建構式

所以結果會如下

student class with className
forignStudent class

 

arrow
arrow

    痞客興 發表在 痞客邦 留言(0) 人氣()