多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。
比如,你的女盆友让你买点水果回来,不管买回来的是苹果还是西瓜,只要是水果就行,这个就是生活中多态的体现
再比如,小猫、小狗、小猪我们可以把他们都归纳成小动物,每种小动物都需要吃东西,所以我们可以统一设置他们都必须吃,但
是每种小动物的习性不一样,那这个就可以设置成小动物自己特有的功能,多态对象只能调用父类中定义子类中重写的功能,并不能调用
子类的特有功能,这样就实现了代码的统一
多态的特点
1多态的前提1:是继承
2多态的前提2:要有方法的重写
3父类引用指向子类对象,如:Animal a = new Cat();
4多态中,编译看左边,运行看右边
多态的好处
多态可以让我们不用关心某个对象到底具体是什么类型,就可以使用该对象的某些方法
提高了程序的可扩展性和可维护性
多态的使用
前提:多态对象把自己看做是父类类型
成员变量: 使用的是父类的
成员方法: 由于存在重写现象,所以使用的是子类的
静态成员: 随着类的加载而加载,谁调用就返回谁的
以下为一个案例
public abstract class Driver
{
public void run();//让子类来运行
}
class SBenz : Driver
{
public void run()
{
Console.WriteLine("Benz在以200迈的速度在run");
}
}
class JD : Driver
{
public void run()
{
Console.WriteLine("JD is running...");
}
}
class Person
{
private Driver driver;
public Person()
{
}
public Person(Driver driver)
{
this.driver = driver;
}
public void drive()
{
driver.run();
}
public void setDriver(Driver driver)
{//运用参数多态,以后不管买什么车都可以
this.driver = driver;
}
}
static void Main(string[] args)
{
Person p = new Person();
JD jd = new JD();//刚开始没钱就买辆JD吧
p.setDriver(jd);
p.drive();
SBenz benz = new SBenz();//有钱换车了
p.setDriver(benz);
p.drive();
}
上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我
们可以设计一个工厂类,专门生成汽车
我们将多态使用在方法的返回类型中
Driver可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口
public class CarFactory
{
public Driver factory(String carName)
{
if (carName.Equals("JD"))
{
return new JD();
}
else if (carName.Equals("Benz"))
{
return new SBenz();
}
else
{
Console.WriteLine("对比起,不伺候");
return null;
}
}
}