C#面向对象多态抽象类

博客介绍了C#中抽象类的相关知识。当父类方法不知如何实现时,可将父类写成抽象类、方法写成抽象方法,并阐述了抽象类的一系列规则,如成员标记、实例化限制等。还对比了普通类与抽象类的适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类

当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法
1. 抽象类成员必须标记为abstract,并且不能有任何实现。
2.抽象成员必须在抽象类中
3.抽象类不能被实例化

4.子类继承抽象类后,必须把父类中的所有抽象成员都重写(除非子类也是一个抽象类,这样可以不重写)
5.抽象成员的访问修饰符不能是private
6.在抽象类中可以包含实例成员,并且抽象类的实例成员可以不被子类实现

7.抽象类是有构造函数的,虽然不能被实例化。

8.如果父类的抽象方法中有参数,那么,继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数,
如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候 也必须传入返回值。

如果父类中的方法有默认的实现,并且父类需要被实例化,这是可以考虑将父类定义成一个普通类,用虚方法来实现多态
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。

using System;
using System.Collections;
using System.IO;

namespace 抽象类
{
    class Program
    {
        static void Main(string[] args)
        {
            Shape s = new Circle(5);
            Shape ss = new Square(3, 4);
            double yarea = s.Area();
            double yzc = s.ZhouChang();
            double carea = ss.Area();
            double czc = ss.ZhouChang();
            Console.WriteLine("圆的周长为{0},面积为{1}",yzc,yarea);
            Console.WriteLine("矩形的周长为{0},面积为{1}",czc,carea);
        }
    }

    public abstract class Shape
    {
        public abstract double Area();
        public abstract double ZhouChang();
    }

    public class Circle:Shape
    {
        private double _r;

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

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

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

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

    public class Square:Shape
    {
        private double _a;
        private double _b;

        public double A
        {
            get { return _a; }
            set { _a = value; }
        }

        public double B
        {
            get { return _b; }
            set { _b = value; }
        }

        public Square(double a,double b)
        {
            this.A = a;
            this.B = b;
        }

        public override double Area()
        {
            return this.A * this.B;
        }

        public override double ZhouChang()
        {
            return (this.A + this.B) * 2;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值