继承:子承父业
子:子类 父:父类 业:所有非私有成员
好处:代码的复用
继承后,实例化子类时,不止子类的构造,父类的构造也会执行,而且父类的构造先于子类的构造执行
即使在子类可以看到父类的成员,但成员依然属于父类,所以在使用父类成员的同时也会实例化父类
如果父类中存在有参构造,在子类中必须给参数
public Student():base(1){ }
子类可以重写父类的方法
方法重写分为:隐藏式重写,强制重写
隐藏式重写 关键字new
public new void Show(){//new也可省略 }
隐藏式重写根据对象的类型决定调用哪个类的方法,如果是父类的对象就调用父类的方法,如果是子类的对象就调用子类的方法
强制重写 关键字 virtual,abstract,override
1.virtual 虚方法
虚方法可以被子类重写,也可以直接调用它本身
public virtual void Show(){ //父类 } public override void Show(){ //子类 }
2.abstract 抽象
抽象类不可以实例化,抽象类中不一定要有抽象方法,但是抽象方法必须在抽象类中
抽象方法不可以有方法体,因此必须被子类重写才能使用
抽象类用来表示一种很大的种类,但它本身不存在
例如:狗,鸟,猫都属于动物,但是 “动物” 本身是不存在的,只是一种抽象的概念,所以无法确定它自身的方法,因此抽象方法不能有方法体
public abstract void Show();//父类 public override void Show(){//子类 }
interface 接口
父类只能继承一个,但是接口可以继承多个
接口只需要规定好方法的形式,不需要实现方法,让继承接口的类来实现
接口的方法不实现也可以调用,利于分工合作
interface class { void fun(); }
IO可以操纵文件
操纵文件需要:
FileStream 文件流
StreamWriter 写入器
StreamReader 读取器
简单的操作也可以通过File类的静态方法,比较简便