概述
、同一操作用作用于不同的对象,可以产生不同的执行结果
、一个接口,实现多个功能
2个类型
、静态多态:通过方法重载、运算符重载实现
、动态多态:通过抽象类、虚方法实现
重载(overload)
、在类中,定义方法的不同版本,即方法名必须相同,参数必须不同(类型或数量)
虚方法(virtual)
、基类的方法,用 virtual 声明就是虚方法,在任何子类中都可以被重写
、基类的属性,也可以用个 virtual 声明为虚属性,用法与虚方法一样
、基类的字段和静态方法不能用 virtual 声明
覆盖方法(override)
、子类的方法,用 override 声明就是覆盖方法,基类中同名的虚方法被覆盖
隐藏方法(new)
、子类的方法,用 new 声明就是隐藏方法,基类中同名的方法被隐藏
、隐藏方法用public new,隐藏变量用new public
抽象类(abstract)
、抽象类是用 abstract 声明的类
、抽象类不能实例化,可以包含抽象方法和正常方法
、如果类中包含抽象方法,则该类必须是抽象类
、抽象子类中,可以重写抽象基类的部分抽象方法
、实现部分抽象方法的子类,也是抽象类
、非抽象子类,必须重写所有抽象方法
抽象方法(abstract)
、抽象方法是用 abstract 声明的方法
、抽象方法不能直接实现,必须在派生类中重写
接口(Interface)
、接口是一种约束形式,用 interface 声明
、接口只能包含方法、属性、事件、索引器
、接口不能被实例化,既不能有构造函数,也不能有字段
、接口只能定义成员的签名,不允许包含成员的实现内容
、接口不允许声明成员的修饰符,成员的默认修饰符是 public
重载 和 重写 区别
、重载在同类中;重写在父子类中
、重载定义是方法名相同,参数不同;重写是方法名和参数都相同
、重载同一个对象调用;重写不同的对象调用
、重载是编译时多态,重写是运行时多态
抽象类 和 接口 区别
、抽象类的方法,可以实现,也可以不实现;接口的方法不能实现
、抽象子类可以不实现抽象基类的抽象方法;接口子类必须实现接口的方法
、抽象基类定义新方法,抽象子类可以不作处理;接口子类必须定义新方法