什么是多态
  一句话解释,同一种事物表现出的多种形态。
 看完以后,应该还是蒙的,还是看代码吧。。
 现有Person类,Student类,Teacher类
 其中Person类是Student和Teacher类的父类。换句话说,Student类和Teacher类都继承自Person类。
 在Person类中有一个SayHi方法,Student和Teacher的SayHi方法肯定是不一样的。
  现要求在一个静态方法中,他的形参是Person p,实参可能是Student类或者是Teacher类,在函数内部通过调用p.SayHi()来达到调用其不同子类的不同SayHi方法。
 如果实现了上面的要求,可以说就是多态的实现。
  三种方式实现多态
 //person类,父类
 class Person
 {
 public virtual void SayHi(){Console.WriteLine(“我是Person类中的SayHi方法”);}
}
 //student类,子类
 class Student : Person
 {
 public override void SayHi(){Console.WriteLine(“我是Student类中的SayHi方法”);}
}
 //Teacher类,子类
 class Teacher : Person
 {
 public override void SayHi(){Console.WriteLine(“我是Teacher类中的SayHi方法”);}
}
 通过抽象类
 //person类,父类
 abstract class Person
 {
 public abstractvoid SayHi();
}
 //student类,子类
 class Student : Person
 {
 public override void SayHi(){Console.WriteLine(“我是Student类中的SayHi方法”);}
}
 //teacher这里就不写出来了
 通过接口    
  public interface IPerson
 {
  void SayHi();
 }
  class Student : IPerson
 {
  public void SayHi()
  {
  Console.WriteLine(“我是Student类中的SayHi方法”);
  }
 }
  通过虚方法实现多态的完整代码
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
  namespace 多态的实现
 {
 class Program
 {
 static void Main(string[] args)
 {
 Student stu = new Student();
 Teacher tea = new Teacher();
 Fun(stu);
 Fun(tea);
  Console.ReadKey();
 }
  static void Fun(Person p)
 {
 p.SayHi();
 }
 }
  class Person
 {
 public virtual void SayHi()
 {
 Console.WriteLine("我是Person类中的SayHi方法");
 }
 }
  class Student : Person
 {
 public override void SayHi()
 {
 Console.WriteLine("我是Student类中的SayHi方法"); 
 }
 }
  class Teacher : Person
 {
 public override void SayHi()
 {
 Console.WriteLine("我是Teacher类中的SayHi方法");
 }
 }
 }
 运行结果
 我是Student类中的SayHi方法
 我是Teacher类中的SayHi方法
 结束语
  写这篇随笔的目的是出于锻炼自己的表达能力和思维逻辑能力的,若给你后面的学习带来误解请谅解。
  感谢博客园
 感谢黑马训练营
 2014/1/17 15:00