C#圖文說明教程第8課:類的繼承
發(fā)表時間:2024-06-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本節(jié)課將介紹C#中的繼承,其目的如下: 1.基類的實現(xiàn) 2.類的繼承 3.在派生類中初始化基類 4.如何調(diào)用基類成員 5.如何覆蓋基類成員 繼承是面向?qū)ο蟪绦蛟O(shè)計的主要特征之一,它可以讓你重用代碼,可以節(jié)省程序設(shè)計的時間。 1.清單8-1 繼承: BaseClass.cs using System...
本節(jié)課將介紹C#中的繼承,其目的如下:
1.基類的實現(xiàn)
2.類的繼承
3.在派生類中初始化基類
4.如何調(diào)用基類成員
5.如何覆蓋基類成員
繼承是面向?qū)ο蟪绦蛟O(shè)計的主要特征之一,它可以讓你重用代碼,可以節(jié)省程序設(shè)計的時間。
1.清單8-1 繼承: BaseClass.cs
using System;
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
}
}
Output:
Parent Constructor.
Child Constructor.
I'm a Parent Class.
說明
清單8-1演示了兩個類的用法。上面的一個類名為ParentClass, main函數(shù)中用到的類名為ChildClass。要做的是創(chuàng)建一個使用父類ParentClass現(xiàn)有代碼的子類ChildClass。
1.首先必須說明ParentClass是ChildClass的基類。
這是通過在ChildClass類中作出如下說明來完成的:"public class ChildClass : ParentClass"。在派生類標(biāo)識符后面,用分號":" 來表明后面的標(biāo)識符是基類。C#僅支持單一繼承。因此,你只能指定一個基類。
2.ChildClass的功能幾乎等同于ParentClass。
因此,也可以說ChildClass "就是" ParentClass。在ChildClass 的Main()方法中,調(diào)用print() 方法的結(jié)果,就驗證這一點。該子類并沒有自己的print()方法,它使用了ParentClass中的 print()方法。在輸出結(jié)果中的第三行可以得到驗證。
3.基類在派生類初始化之前自動進(jìn)行初始化。
注意到清單8-1的輸出結(jié)果。ParentClass 類的構(gòu)造函數(shù)在ChildClass的構(gòu)造函數(shù)之前執(zhí)行。
2.清單 8-2. 派生類同基類進(jìn)行通信: BaseTalk.cs
using System;
public class Parent
{
string parentString;
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
}
public void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
Output:
From Derived
Child Constructor.
I'm a Parent Class.
I'm a Child Class.
I'm a Parent Class.
說明
1.派生類在初始化的過程中可以同基類進(jìn)行通信。
清單8-2演示了在子類的構(gòu)造函數(shù)定義中是如何實現(xiàn)同基類通信的。分號":"和關(guān)鍵字base用來調(diào)用帶有相應(yīng)參數(shù)的基類的構(gòu)造函數(shù)。輸出結(jié)果中,第一行表明:基類的構(gòu)造函數(shù)最先被調(diào)用,其實在參數(shù)是字符串"From Derived"。
2.有時,對于基類已有定義的方法,打算重新定義自己的實現(xiàn)。
Child類可以自己重新定義print()方法的實現(xiàn)。Child的print()方法覆蓋了Parent中的 print 方法。結(jié)果是:除非經(jīng)過特別指明,Parent類中的print方法不會被調(diào)用。
3.在Child類的 print() 方法中,我們特別指明:調(diào)用的是Parent類中的 print() 方法。
方法名前面為"base",一旦使用"base"關(guān)鍵字之后,你就可以訪問基類的具有公有或者保護(hù)權(quán)限的成員。 Child類中的print()方法的執(zhí)行結(jié)果出現(xiàn)上面的第三行和第四行。
4.訪問基類成員的另外一種方法是:通過顯式類型轉(zhuǎn)換。
在Child類的Main()方法中的最后一條語句就是這么做的。記。号缮愂瞧浠惖奶乩_@個事實告訴我們:可以在派生類中進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,使其成為基類的一個實例。清單8-2的最后一行實際上執(zhí)行了Parent類中的 print()方法。
小結(jié)
你已經(jīng)了解了如何創(chuàng)建一個派生類及其基類。你可以對基類成員進(jìn)行初始化,以及如何對方法進(jìn)行隱式或者顯式的調(diào)用。你也了解了派生類是其基類的一個特例。