什么是多态
一句话解释,同一种事物表现出的多种形态。
看完以后,应该还是蒙的,还是看代码吧。。
现有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