携君同学汇:C# 类的多态与继承

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 11:36:20
1.了解什么是多态性

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
    {

        public override void Draw()
        {
            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.");
        }
    }}