C# 學習筆記(十四)類、繼承、多態

1. 類

1.1 定義類

Class 類名 
{
	// 類的實現
	
	// 成員變量、成員函數等
}

1.2 構造函數

默認的構造函數是不帶參數的

Person *p = new Person();

我們可以複寫父類的構造方法,以達到我們自己的目的,傳遞參數等:

using System;

namespace Test
{
    class Person
    {
        public string userName; // 用戶名

        public Person(string name)
        {
            Console.WriteLine("對象已創建,name = {0}", name);
            userName = name;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("張三");
            Console.WriteLine("Person: {0}", p.userName);
        }
    }
}

打印如下:

對象已創建,name = 張三
Person: 張三

Press any key to continue...

1.2 析構函數

這裏瞭解一下析構函數的概念。

// 析構函數
~Person ()
{
		Console.WriteLine("對象已刪除");
}

在對象被釋放後會執行析構函數。

1.3 靜態成員

static 關鍵字修飾靜態成員。

注意:當我們聲明一個類成員爲靜態時,意味着無論有多少個類的對象被創建,只會有一個該靜態成員的副本。

關鍵字 static 意味着類中只有一個該成員的實例。

以下這個程序可以讓我們更好的理解什麼是靜態變量:

using System;

namespace Test
{
    class StaticVar
    {
        public static int num;

        public void cout()
        {
            num++;
        }

        public int getNum()
        {
            return num;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StaticVar v1 =  new StaticVar();
            StaticVar v2 = new StaticVar();
            StaticVar v3 = new StaticVar();

            v1.cout();
            v2.cout();
            v3.cout();

            Console.WriteLine("v1 num: {0}", v1.getNum());
            Console.WriteLine("v2 num: {0}", v2.getNum());
            Console.WriteLine("v3 num: {0}", v3.getNum());
        }
    }
}

打印如下:

v1 num: 3
v2 num: 3
v3 num: 3

Press any key to continue...

也就是說,靜態變量是類所屬的,對象也只是引用,該變量只有一個。

2.繼承和多態

“子類和父類”,“基類和派生類”這種關係。

2.1 繼承的定義

class 子類 : 父類  
{
	
}

2.2 理解繼承和多態

這裏有一個例子:

using System;
namespace Test
{
    class Car
    {
        public string brand; // 品牌
        public string model; // 型號

        // 定義一個run方法。注意C# 中方法名首字母大寫。注意這裏的virtual。
        public virtual void Run()    
        {
            Console.WriteLine("the car is runing !");
        }
    }

    class Bicycle : Car      // 自行車繼承於Car
    {
        // 複寫父類方法,父類方法使用virtual修飾,所以這裏不會報警告,否則會。
        public override void Run()      
        {
            base.Run(); // 調用父類方法,也可以不調用,這個根據業務邏輯。
            Console.WriteLine("right, bicycle is runing !");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Bicycle b = new Bicycle();
            b.Run();
        }
    }
}

打印如下:

the car is runing !
right, bicycle is runing !

Press any key to continue...

Bicycle繼承於Car,繼承了父類的方法Run(),並通過重寫這個方法,表現出不同形式,這就是多態。

Bicycle能繼承父類的public的變量、方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章