重写和重载重点
虚方法:使用virtual关键字修饰,使用virtual关键字修饰的方法在本类中必须有实现,哪怕是空的{}。虚方法存在的意义就是为了让子类重写。子类可以重写,也可以不重写。 方法重写:只有用virtual、abstract、override修饰的方法在继承后子类可以重写。//实现方法重写的方式3个关键字
什么是方法重写?
答:方法重写是指子类继承父类后在子类中有一个与父类中某个方法签名一致,但方法内容可以重新定义的方法,并用override关键字修饰。
抽象类:abstract关键字修饰;不能实例化;可以有抽象成员也可以有非抽象成员(1.有抽象成员的类必须标记为abstract,并且不能有任何实现;2.类中的抽象成员在子类中必须实现(override),除非子类也是抽象类); virtual方法和abstract方法的区别: virtual方法子类可以override,也可以不override。 Abstract标记的成员在子类中必须override,除非子类也是抽象类。 ToString()方法、Equals()来自于Object,任何类都有,通过override有了不同的实现(比如ToString())
使用virtual关键字修饰的方法在本类中必须有实现,哪怕是空的{}。
new()实例,new[]声明--数组,叫声明,不叫实例化
子类加关键字new,父类不可以调用 有抽象成员的类必须标记为abstract,并且不能有任何实现;
派生类不能继承重写构造函数,可以base调用
多态-----方法(重写,重载);继承-----类
必须先继承在多态(必须在子类中才能实现对父类虚方法的重写) 重载可以在同一个类 重写之后,方法可以一样也可以不一样,一样就没意义了 重载和重写的返回值问题: 重载函数与返回值无关,可以自己定,但是参数的类型或者个数不能一样 重写函数与返回值有关系,返回值必须一致 二者都是函数的名称一样
// 对于父类指向子类: //如果父类为虚方法并且该子类已经给重写(二者缺一不可),那么父类点出来的方法则调用的是子类的override方法; //否则为本身的方法,默认为本身的方法