21
5

面向对象必知:继承本质论

0
归档:2012年5月分类:架构之路
内容纲要

每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。
继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。
在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点:
1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法;
2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段;
3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员;
4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问;
5、new在虚方法继承中起阻断作用。
上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看:
#region 深入理解继承机制、多态、封装
public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("All Animals need eating!");
}
}
public class Bird : Animal
{
private string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
private string color;
public string Color
{
get { return this.color; }
set { this.color = value; }
}
}
public class Chicken : Bird
{
private string type = "Chicken";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
public void ShowColor()
{
Console.WriteLine("Color is {0}", Color);
}
}
#endregion
上面是定义了一个抽象父类和两个子类,下面是调用方法:
#region 深入理解OO思想
//Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作
Bird bird = new Bird();
Chicken chicken = new Chicken();
Bird bird2 = new Chicken();//请注意上面这里的区别
bird.ShowType();
chicken.ShowType();
bird2.ShowType();
#endregion
如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了


声明: 本文采用 BY-NC-SA 协议进行授权. 未标注“转”的文章均为原创,转载请注明转自: 面向对象必知:继承本质论

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。