abstract 抽象类

什么是抽象类?
如果一个类不与具体的事物相联系,而是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类。在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。

是不是感觉跟没说一样,别慌,往下看

抽象类
1.抽象类不能直接实例化。(就是不能new)
2.抽象类中可以包含抽象成员,但非抽象类中不可以(抽象里面才能有抽象成员)
3.抽象类不能被密封(abstract和sealed不会同时出现)

抽象方法

声明抽象方法时,只需在其前加上abstract关键字就ok了。声明抽象方法注意事项:
1。抽象方法必须声明在抽象类中(就是前面我们所说的抽象成员只能在抽象类中)
2.声明抽象方法时,不能使用virtual,static和private修饰符。
抽象方法声明引入一个新方法,但不提供该方法的实现,由于抽象方法不提供任何实际实现,因此抽象方法的方法体只包含一个分号。
例:

public abstract class myAbstract
{
    public abstract void method;//抽象方法
}

当抽象类派生一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现。重写方法时,使用overrider关键字

抽象类和抽象方法的使用

namespace Test04
{
    public abstract class myClass
    {
        private string id = "";
        private string name = "";
        /// <summary>
        /// 编号属性及实现
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// <summary>
        /// 姓名属性及实现
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 抽象方法,用来输出信息
        /// </summary>
        public abstract void ShowInfo();
    }
    public class DriveClass : myClass                   //继承抽象类
    {
        /// <summary>
        /// 重写抽象类中输出信息的方法
        /// </summary>
        public override void ShowInfo()
        {
            Console.WriteLine(ID + " " + Name);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DriveClass driveclass = new DriveClass();       //实例化派生类
            myClass myclass = driveclass;               //使用派生类对象实例化抽象类
            myclass.ID = "BH0001";                  //使用抽象类对象访问抽象类中的编号属性
            myclass.Name = "TM";                        //使用抽象类对象访问抽象类中的姓名属性
            myclass.ShowInfo();                     //使用抽象类对象调用派生类中的方法
        }
    }

}

abstract不能直接实例化,上例中注意

  DriveClass driveclass = new DriveClass();     //实例化派生类
            myClass myclass = driveclass;               //使用派生类对象实例化抽象类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值