重写(override):
为了满足某种需求,在子类中重写父类的虚方法和抽象方法。重写的方法必须与父类中被重写的方法签名(方法名,返回值,参数列表)相同,且返回值前面必须有关键字override。
结合实例说明
假设有一个父类Parent,它包含一个算法(Algorithm)的虚方法,通过在子类Child中重写Algorithm方法满足我们求差的需求。
虚方法(virtual):
使用关键字virtual来声明虚方法,是一个可以被子类重写的方法。虚方法在父类中可以有默认实现,也可以没有实现,子类可以选择重写或继承父类的实现。
抽象方法(Abstract ):
使用的abstract关键字在抽象类中定义抽象方法,它没有方法体,不能私有,必须在抽象类的非抽象子类中被重写,若不重写抽象方法将毫无意义。
重载 (overload):
重载是指在一个类内部定义多个具有相同方法名,不同参数列表(参数的类型,参数的个数,参数的顺序)的方法。
结合实例说明
假设有一个 Program
类,它包含一个用于加法运算的方法 Add
。我们可以通过重载 Add
方法来处理不同类型的输入。
重写和重载的区别:
相同点:
1.都是多态的表现形式
2.都允许在子类中重新定义已经存在的方法
不同点:
1.重写在子类;重载在同一个类
2.重写方法名,参数列表,返回值都必须相同;
重载方法名必须相同,参数列表必须不同,返回值可同可不同
3.重写子类的访问级别不能低于父类相对应方法的访问级别
4.重写是运行时多态,指在运行时根据对象的实际类型来决定调用哪个方法;
重载是编译时多态,指在编译时根据方法签名的不同来选择正确方法实现