原文地址: https://www.cnblogs.com/wolf-sun/p/3423842.html
系列文章
UML系列——用例圖Use Case
UML系列——用例圖中的各種關(guān)系(include饼暑、extend)
UML系列——類圖Class
UML系列——類圖class的關(guān)聯(lián)關(guān)系(聚合恩急、組合)
UML系列——類圖class的依賴關(guān)系
泛化關(guān)系的引入
在現(xiàn)實(shí)生活中,有時(shí)會出現(xiàn)一類事物具有另一類事物的全部特點(diǎn)蜜葱,除此之外還有自身的特點(diǎn)。
例如:
“不管白貓黑貓答毫,捉到老鼠的就是好貓摹量。”
泛化關(guān)系的概念與符號(Generalization)
如果一個(gè)類A(父類)的屬性和操作能被另一個(gè)類B(子類)所繼承盔憨,則類B不僅可以包含類A中的屬性和操作徙菠,而且還可以添加自己獨(dú)有的屬性和操作,這種機(jī)制就是泛化郁岩。泛化也稱之為繼承或派生婿奔。
泛化關(guān)系在程序中的體現(xiàn)
class student
{
public int number;
public string name;
public string myclass;
}
class graduate:student
{
public string research;
public string teacher;
}
class Program
{
static void Main(string[] args)
{
graduate g1 = new graduate();
g1.number = 1000;
g1.name = "張三";
g1.myclass = "火鳳凰";
g1.research = "男人和女人到底有什么區(qū)別";
g1.teacher = "雷神";
Console.WriteLine("姓名:"+g1.name);
Console.WriteLine("導(dǎo)師:"+g1.teacher);
}
可見性的分析
(在程序中的演示,這里就不說了问慎,都是子類繼承父類萍摊,很基礎(chǔ)的東西)
泛化關(guān)系的應(yīng)用——多態(tài)
多態(tài)性:在泛化關(guān)系中,父類所定義的操作被子類繼承之后蝴乔,可以表現(xiàn)出不同的行為记餐。
多態(tài)性允許在(有繼承關(guān)系的)多個(gè)類中定義同名的操作,并在每一個(gè)類中有不同的實(shí)現(xiàn)薇正。
c#中的多態(tài)機(jī)制:
父類中:可見性 virual返回值類型 方法名(參數(shù))
子類中:可見性 override 返回值類型 方法嗎(參數(shù))
程序演示:各國不同的問候方式
public class TMan //定義一個(gè)普通人類
{
public string name;
public virtual void sayHello()
{
Console.WriteLine(name+"說漢語");
}
}
public class TChinese : TMan //定義中國人類
{
public TChinese(string x)
{
name = x;
}
public override void sayHello()
{
base.sayHello();
//Console.WriteLine(name+"中國人還會說英語");
}
}
public class TAmerican : TMan //定義美國人類
{
public TAmerican(string x)
{
name = x;
}
public override void sayHello()
{
Console.WriteLine(name+"美國人說英語");
}
}
public class TFrench : TMan //定義法國人類
{
public TFrench(string x)
{
name = x;
}
public override void sayHello()
{
Console.WriteLine(name+"法國人說法語");
}
}
public class TKorean : TMan //定義韓國人類
{
public TKorean(string x)
{
name = x;
}
public override void sayHello()
{
Console.WriteLine(name+"韓國人說韓語");
}
}
class Program
{
static void Main(string[ ] args)
{
TMan x;
x = new TChinese("張三");
x.sayHello();
x = new TAmerican("John");
x.sayHello();
x = new TFrench("蘇非");
x.sayHello();
x = new TKorean("金知中");
x.sayHello();
}
}
(代碼中有省略片酝,只是來說明問題)
多態(tài)的實(shí)現(xiàn)機(jī)制
子類覆蓋父類同名的方法囚衔。
當(dāng)一個(gè)類被繼承時(shí),他的方法也就被其子類繼承雕沿。這種繼承可以是無條件的繼承全部舊方法练湿,也可以重新編寫新方法來覆蓋舊方法。
多態(tài)就是指不同對象收到相同消息時(shí)审轮,會產(chǎn)生不同行為肥哎,同一個(gè)類在不同的場合下表現(xiàn)出不同的行為特征
多態(tài)的作用:把不同的子類對象都當(dāng)作父類來看,可以屏蔽不同子類對象之間的差異疾渣,寫出通用的代碼篡诽,做出通用的編程,以適應(yīng)需求的不斷變化榴捡。
總結(jié)
泛化關(guān)系還是比較容易理解的杈女,泛化可能不知道,但是繼承吊圾,作為程序員不可能不知道达椰。