携君同学汇:C# 类的多态与继承
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 11:36:20
2.如何定义一个虚方法
3.如何重载一个虚方法
4.如何在程序中运用多态性
面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。 如果这些对象都有同名方法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[5];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();
dObj[4] = new luntai();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
Console.ReadLine();
}
}/*输出结果I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object. I'm a luntai of Circle. */
/*带有虚方法的基类:DrawingObject.cs
定义了DrawingObject类。这是个可以让其他对象继承的基类。该类有一个名为Draw()的方法。Draw()方法带有一个virtual修饰符,该修饰符表明:该基类的派生类可以重载该方法。DrawingObject类的 Draw()方法完成如下事情:输出语句"I'm just a generic drawing object."到控制台。*/
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
public class luntai : Circle
{
{
Console.WriteLine("I'm a luntai of Circle.");
}
}/* 三个类都派生自DrawingObject类。每个类都有一个同名Draw()方法,这些Draw()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。
第四个类继承派生类 */
} 子类父类转换using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[5];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();
dObj[4] = new luntai();
dObj[3] = new luntai();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
luntai nlt = dObj[3] as luntai ;
nlt.Draw2();
Console.ReadLine();
}
}
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
} public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
} public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
} public class luntai : Circle
{ public override void Draw()
{
Console.WriteLine("I'm a luntai of Circle.");
}
public void Draw2()
{ Console.WriteLine("I'm a 2 luntai of Circle.");
}
}}