(C#)抽象类

抽象类和虚方法的区别:

虚方法父类有实现,抽象类父类无实现,不能用父类实例化。

 

using System;

namespace AbstractTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Dog();
            animal.Say();// 输出结果:Wang

            Animal animal2 = new Cat();
            animal2.Say();// 输出结果:Miao

            Console.ReadLine();
        }
    }

    //抽象类
    public abstract class Animal
    {
        //抽象方法不具有方法体
        public abstract void Say();
    }

    class Dog : Animal
    {
        public override void Say()
        {
            Console.WriteLine("Wang");
        }
    }

    class Cat : Animal
    {
        public override void Say()
        {
            Console.WriteLine("Miao");
        }
    }
}

 

 可能用到的场景:

using System;

namespace AbstractTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Shape shape1 = new Circle(3);//声明一个形状,用圆形类实例化参数半径为3的一个对象。
            Console.WriteLine($"圆形形状面积为:{shape1.GetArea()},形状周长为:{shape1.GetPerimeter()}");

            Shape shape2 = new Rectangle(3,1.5);//声明一个形状,用矩形类实例化参数长为3宽为1.5的一个对象。
            Console.WriteLine($"矩形形状面积为:{shape2.GetArea()},形状周长为:{shape2.GetPerimeter()}");
            Console.ReadLine();
        }
    }

    //图形是抽象类型,各种形状都有可能,没有固定形状
    abstract class Shape
    {
        public abstract double GetArea();//获得形状的面积
        public abstract double GetPerimeter();//获得形状的周长
    }

    //圆形也是形状的一种,所以继承自Shape
    class Circle : Shape
    {
        //构造方法初始化圆形的半径
        public Circle(double r)
        {
            R = r;
        }

        //圆形的自有属性-半径
        public double R { get; set; }

        //重写父类的函数
        public override double GetArea()
        {
            return Math.PI * R * R; //圆面积πr²
        }

        public override double GetPerimeter()
        {
            return 2 * Math.PI * R; //圆周长2πr
        }
    }

    //矩形也是形状的一种,一样是继承自Shape
    class Rectangle : Shape
    {
        //构造方法初始化矩形的长和宽
        public Rectangle(double length,double width)
        {
            Length = length;
            Width = width;
        }

        //矩形的自有属性长
        public double Length { get; set; }
        //矩形的自有属性宽
        public double Width { get; set; }

        public override double GetArea()
        {
            return Length * Width;//矩形面积为长*宽
        }

        public override double GetPerimeter()
        {
            return 2 * (Length + Width);//矩形周长为长加宽乘以2
        }
    }

}

 

 

posted @ 2021-05-30 11:31  30殺大魔王  阅读(120)  评论(0)    收藏  举报