------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
继承(是指类与类之间的关系。)
车 (Vehicle)
—卡车(Truck)
轻型卡车
重型卡车
— 轿车 (Car)
--小轿车
面包车
如何判断一个继承关系是否合理?子类 is a 父类。
卡车和轿车都是车,都有轮子、发动机。但是卡车又能拉货,轿车能拉人
Base Class→基类、Parent Class→父类
Derived Class→派生类、Child Class→子类
为什么要继承?继承带给我们的好处?
代码重用
LSP里氏替换原则、多态。(程序的可扩展性、灵活性)方法重写override。虚方法的原理:虚方法表。
子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用、以及多态。
类的单根继承性、传递性、继承时构造函数的问题。构造函数不能被继承。
所有的类都直接或间接的继承自object。查看IL代码
继承带给我们的两个好处:
1.代码重用
2.多态(里氏替换原则LSP)
访问修饰符
1.当写好一个类以后,默认会存在一个没有参数的构造函数(即便我们不写构造函数,也会存在这么一个无参的构造函数)
2. 当手动添加一个构造函数以后,会将默认的无参数的构造函数覆盖掉。
3.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。
private:只能在本类中访问
protected:当前类内部以及所有的子类中(子类内部)。不区分是否在同一个程序集中。
internal:在当前程序集内部可以访问。跨程序集则无法访问.【protected与internal没有可比性。】
proteced internal :在当前程序集中或者是在子类中都可以访问。综合了一下protected与internal的特性。
public :能再任何地方访问。
注意:访问级别约束
子类的访问级别不能比父类的高。(会暴露父类的成员)
类中属性或字段的访问级别不能比所对应的类型访问级别高。
方法的访问级别不能比方法的参数和返回值的访问级别高。
用于解决“可访问性不一致”的错误
继承还有一个重要的特性,父类对象可以引用子类实例。
儿子继承父亲,儿子又把管理自己事务的权利交给父亲,那么父亲就可以代表儿子处理事务,这就是父类对象引用子类实例。现在生活中,父母可以代表儿子处理事务,总公司可以代表子公司生命权利。
继承的时候,构造函数是不能被继承的。(构造函数不能被继承。)
将子类对象赋值给父类对象,所得到对象是这样的一个对象:
它是一个编译是为父类对象,但运行却是一个子类对象。具体特征如下:
1.被声明为父类对象
2.拥有父类属性
3.占用子类的内存空间
4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.
c#中任何一个类都是继承自object类的。
如果一个类没有显示继承自任何类,则默认继承自object类。
如果显示的指定了当前类继承自某个类,则将覆盖默认继承的object类。
继承的传递性:
SuperMan继承了object,这时,SuperMan类中就有了从object类中继承下来的4个方法ToString()、GetType()、GetHashCode()、Equals()。
然后Person又继承了SuperMan,这时,Person会将SuperMan中的那4个方法再继承下来。由于那4个方法是在object中的,所以相当于Person类间接从Object类中继承下来了成员
这个就叫继承的传递性。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------