首页 > 代码库 > C# 之 继承
C# 之 继承
继承
继承是OOP最重要的特性之一。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在OOP中,被继承的类称为父类。在C#中的对象仅能直接派生于一个基类。
对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。“猫是哺乳动物”,就说明了猫与哺乳动物之间继承与被继承的关系。实际上,继承者还可以理解为是被继承者的特殊化,因为它除了具备被继承者的特殊性外,还具备自己独有的个性。例如,猫就可能拥有抓老鼠、爬树等“哺乳动物”对象所不具备的属性。
如果子类继承与父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能(方法重写)。
例如:考虑一个农场家禽家畜的类。这个类叫做Animal,拥有EatFood()和Breed()方法,我们可以创建一个子类Cow,支持所有这些方法,它也有自己的方法,如Moo()和SupplyMilk()。还可以创建另一个子类Chicken,该类有Cluck()和LayEgg()
继承的优点:继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易。
继承是OOP最重要的特性之一。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在OOP中,被继承的类称为父类。在C#中的对象仅能直接派生于一个基类。
对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。“猫是哺乳动物”,就说明了猫与哺乳动物之间继承与被继承的关系。实际上,继承者还可以理解为是被继承者的特殊化,因为它除了具备被继承者的特殊性外,还具备自己独有的个性。例如,猫就可能拥有抓老鼠、爬树等“哺乳动物”对象所不具备的属性。
如果子类继承与父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能(方法重写)。
例如:考虑一个农场家禽家畜的类。这个类叫做Animal,拥有EatFood()和Breed()方法,我们可以创建一个子类Cow,支持所有这些方法,它也有自己的方法,如Moo()和SupplyMilk()。还可以创建另一个子类Chicken,该类有Cluck()和LayEgg()
class Program { static void Main(string[] args) { Cow cow = new Cow("牛牛"); cow.EatFood(); cow.Breed(); cow.Moo(); cow.SupplyMilk(); Console.WriteLine(); Chicken chicken = new Chicken("咕咕"); chicken.EatFood(); chicken.Breed(); chicken.Cluck(); chicken.LayEgg(); } } //动物类 class Animal { protected string name = ""; public Animal(string name) { this.name = name; } public void EatFood() //吃东西 { Console.WriteLine(this.name + "会吃东西"); } public void Breed() //繁殖后代 { Console.WriteLine( this.name + "能繁殖后代"); } } class Cow:Animal { public Cow(string name): base(name) { } public void Moo() //牛叫 { Console.WriteLine( "我的名字叫" + name + " 哞"); } public void SupplyMilk() //提供牛奶 { Console.WriteLine( "我的名字叫" + name + " 我能提供牛奶"); } } class Chicken : Animal { public Chicken(string name):base(name) { } public void Cluck() //鸡叫 { Console.WriteLine("我的名字叫" + name + " 咯咯咯"); } public void LayEgg() //下蛋 { Console.WriteLine("我的名字叫" + name + " 我能下蛋"); } }
继承的优点:继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易。
继承的缺点:如果父类改变,那么子类就不得不变。继承会破坏包装,父类实现细节暴露给子类,增大了两个类之间的耦合性。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。