继承
继承优点:减少代码冗余,实现代码复用
继承的一些概念
1)在C#中,如果一个类后面通过冒号又跟了另一个类,那么我们就称冒号前边的类为子类,
冒号后边的类为父类。这种书写类的方式反映出来的关系就称为类的继承关系。
2)子类:派生类
父类:基类或者超类
满足is a 关系的两个类可以使用继承
例如:
学生 is a person
base
base:父类的对象
base():看成是调用父类的构造beast()
base(参数列表)父类带参构造的参数列表一致,只能出现在子类构造后边、
new子类到底发生了什么,?
new子类过程
1)从Main---->子类带参构造,但是不进子类构造
2)发现子类构造后base().调用对应的父类构造。
并且将父类构造方法执行完(进入父类构造的{},执行其中代码)
3)父类构造执行完毕,回到子类构造的{}执行代码
4)子类构造执行完毕,回到Main函数,进而将子类对象创建出来
到该步骤已经成功向内存索要了空间。子类对象已然存在了
图解
没有base编辑器底层会自动调用父类的无参构造
访问修饰符
public:任何位置,包括跨程序集
intemal:在当前程序集(项目)中都可以访问
private:只能在当前类中访问(当前类的花括号中访问)
protected:只能在当前类和其子类中使用
类的访问修饰符
public
intemal(内部的)
字段的访问修饰符
public
private
方法的访问修饰符
public
private
继承的特性
单根性:一个类只能有一个直接的父类
传递性:如果一个类B继承子类A,而类C又继承类B,那么类C也可以
访问到类A中非私有你成员
多态
不同的对象,对于同一个操作,做出的响应不同
实现多态三种方法
1)在父类中通过virtual关键字定义一个虚方法
2)在子类中通过override关键字对父类中的虚方法进行重写
3)调用的时候,调用的是子类方法