多态就是不同对象对同一个消息的不同相应方式。
举例:cut(消息)
医生收到cut消息后,执行动手术;
理发师收到cut消息后,执行减法;
演员收到cut消息后,停止演出。
三个不同对象,对同一个cut消息的反应都不同,这就是多态。
在C#中abstract和virtual方法都能实现多态。
1.用abstract修饰方法是抽象方法,没有方法体,该类必须声明为abstract class(抽象类),用virtual修饰的方法是虚方法,有方法体;
2.子类继承了抽象类,必须重写(override)父类抽象方法,而不一定要重写父类的虚方法;
3.子类只有重写的父类的虚方法后才能实现多态;
- public class Person{
- public virtual void Hello(){
- Console.WriteLine("Person hello");
- }
- }
- public class Student:Person{
- public void Hello(){
- Console.WriteLine("Student hello");
- }
- }
- List<Person> persons=new List<Person>();
- foreach(Person p in persons){
- p.Hello();//打印是Person hello
- }
- //因为子类的Hello没有使用override,相当于是new方法,导致不能实现多态
- public new void Hello(){
- Console.WriteLine("Student hello");
- }