多态(虚方法、抽象类)


多态:

虚方法(virtual    override)

抽象类(abstract  override)

class Program
    {
        static void Main(string[] args)
        {

            //虚方法


            /*RealDuck realDuck = new RealDuck();
            realDuck.Bark();
            MuDuck muDuck = new MuDuck();
            muDuck.Bark();
            XpDuck xpDuck = new XpDuck();
            xpDuck.Bark();*/
            RealDuck[] rd = { new RealDuck(), new MuDuck(), new XpDuck() };
            for(int i = 0; i < rd.Length; i++)
            {
                rd[i].Bark();
            }


            //抽象类练习
            //计算圆形的面积
            XingZhuang xz = new Circle(5);
            double area = xz.GetArea();
            double perimeter = xz.GetPerimeter();
            Console.WriteLine("这个形状的面积是{0:0.00},周长是{1:0.00}", area, perimeter);

        }
    }
    
    abstract class XingZhuang
    {
        //父类,封装子类共有的成员
        public abstract double GetArea();
        public abstract double GetPerimeter();
    }


    class Circle : XingZhuang
    {
        private double _r;

        public double R { get => _r; set => _r = value; }

        public Circle(double r)
        {
            this.R = r;
        }

        public override double GetArea()
        {
            return Math.PI*this.R * this.R;
        }

        public override double GetPerimeter()
        {
            return 2*Math.PI * this.R ;
        }
    }



    class RealDuck
    {
    public virtual void Bark()
        {
            Console.WriteLine("嘎嘎叫");
        }
    }

    class MuDuck : RealDuck
    {
        public override void Bark()
        {
            Console.WriteLine("木头鸭子吱吱叫");
        }
    }
    class XpDuck : RealDuck
    {
        public override void Bark()
        {
            Console.WriteLine("橡皮鸭子唧唧叫");
        }
    }

相关