继承小结

来源:互联网 发布:番茄 软件 编辑:程序博客网 时间:2024/05/18 18:03
继承,封装和多态是OOP面向对象编程的三大特性,在C#中所有类都继承于Object类。集成用于创建新类,这些新类的行为可以是复用,扩展和修改其他类的行为。一个类只能有一个直接基类,但是继承可以传递,所有一个类可以有很多基类。
1.从概念上来说,派生类实际上是基类的特例。比如存在基类“动物类”,派生类“哺乳动物类”和“爬行动物类”。哺乳动物也是动物,但是动物就不能说是哺乳动物。类似的,子类可以是父类类型没问题,但是将父类说成子类类型就错了。
2.当派生类继承自己的直接基类时,将所有基类成员都继承了,但是不会继承基类的构造函数和毁灭函数(析构函数),所以在创建派生类时,必须有自己的构造函数。
通过继承复用代码曾经被认为面向对象最重要的目标之一,但是在实际中滥用继承后患无穷,因此,真正使用继承应该是模拟大自然中的“IS_A”的关系,比如简单的狮子是一种动物的时候,在去用狮子类继承动物类。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Inherit{    class Program    {        static void Main(string[] args)        {            Parent p = new Parent();            Child c = new Child();            p = c;            p.OverLoad();            p.Override();            (p as Child).OverLoad();            Console.WriteLine(p.a);            Console.WriteLine((p as Child).a);        }    }    class Parent    {        public int a = 1;        public void OverLoad()        {            Console.WriteLine("parent.overload");        }        public virtual void Override()        {            Console.WriteLine("parent.override");        }    }    class Child : Parent    {        public int a = 2;                public void OverLoad()        {            Console.WriteLine("child.overload");                               }        public override void Override()        {            Console.WriteLine("child.override");        }    }}
在这个例子中,分别创建子类对象和父类对象,并且子类对象赋值给父类对象,实际上是让一个父类类型的引用变量指向一个子类实例,也就是说“子类是一种父类”,因此再调用中,所得到的字段,方法等等都是父类中的。但是特例是重写的虚方法,调用的是子类中重写方法,这里我推测是在创建子类实例的时候,子类中重写的方法已经覆盖掉了父类中的虚方法了。
另外,我认为虚方法和重写方法在继承和多态中十分重要,让代码更加灵活,减少修改,增加复用代码
0 0
原创粉丝点击