标签:
多态(dynamic):三要素
继承,实现,父类引用指向子类(向上类型转换Upcast)
多态特性
1.它是运行期,谁New出来的就调用谁里面的方法和属性
2.一个类存在多种状态
应用场景
比如说:我们要做一个画图软件,里面当然可以画。正方形,长方形,圆形....等等。这些形状了。
      面象对象思维分析:正方形,长方形,圆形。它一定有同共的属性的方法,比如说属性有:颜色,长度,高度...。而方法它们都有:画(Draw)....。所以我们可以提一个形状类(Graphics)类出来。所有图形就去继承它。
  
代码如下:
/// <summary>
/// 画笔抽象类
/// </summary>
public abstract class Graphics
{
	public abstract void Draw();
}
/// <summary>
/// 正方形
/// </summary>
public class Square : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画正方形");
	}
}
/// <summary>
/// 长方形
/// </summary>
public class Rectangle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画长方形");
	}
}
/// <summary>
/// 圆
/// </summary>
public class Circle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画圆形");
	}
}
因为形状这个东西指的范围太广了(也就是一个抽象的东西(比如:三角形,四角形,正五边形也是形状))所以就用一个abstract来修饰Graphics类
上面我讲过多态三要素:继承,实现,父类引用指向子类(向上类型转换Upcast)。上面的代码已经完成前二步了(第一继承,第二实现),接下来我们完成第三步就实现了多态
static void Main(string[] args)
{
	Graphics p1 = new Square();
	Graphics p2 = new Rectangle();
	Graphics p3 = new Circle();
	Graphics[] paints = { p1, p2, p3 };
	Draw(paints);
}
public static void Draw(Graphics[] paints)
{
	foreach (Graphics p in paints)
	{
		p.Draw();
	}
}
/// <summary>
/// 画笔抽象类
/// </summary>
public abstract class Graphics
{
	public abstract void Draw();
}
/// <summary>
/// 正方形
/// </summary>
public class Square : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画正方形");
	}
}
/// <summary>
/// 长方形
/// </summary>
public class Rectangle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画长方形");
	}
}
/// <summary>
/// 圆
/// </summary>
public class Circle : Graphics
{
	public override void Draw()
	{
		Console.WriteLine(@"画圆形");
	}
}
分析图
  
上面就是一个多态简单的Demo了。
总结:
1.多态三要素:继承,实现,父类引用指向子类
2.如果你的项目没有前期的需求分析的,一般会很少用到多态。多态一般在软件设计上面用得比较多。
3.面向对象编程(OOP)三大特性:继承,封装,多态。
4.多态它是在运行期才确定去调用那个方法的(相当于说是晚绑定)
(PS:文章如有误,愿见谅。希望能指出来,以免误人子弟了。^_^)
标签:
原文地址:http://www.cnblogs.com/qq610540622/p/4621928.html