C# 抽象类和抽象方法知识总结

抽象类不能被实例化

 定义抽象类AbstractClass:

abstract class AbstractClass
{
    public abstract void AbstractMethod1();
    public abstract void AbstractMethod2();
}

对其实例化:

AbstractClass acec = new AbstractClass();

会提示:

无法创建抽象类和接口的实例。

就算为抽象类定义公开的构造方法,同样也是无法实例化的。

因为设计抽象类的初衷就是被用来继承的,而不是为了实例化的。

 

抽象方法没有方法主体

很显然下面的代码会出错,会提示:方法AbstractMethod1无法声明主体,因为它被标记为abstract。

abstract class AbstractClass
{
    public abstract void AbstractMethod1()
    {
        Console.WriteLine("AbstractMethod1");
    }
}

抽象方法必须在子类中重写。

 

如果类包含抽象方法,类必须是抽象类

下面的代码同样是不对的,会提示:方法AbstractMethod1是抽象的,但是它包含在非抽象类AbstractClass中。

class AbstractClass
{
    public abstract void AbstractMethod1();
}

 

抽象类可以包含非抽象的方法

下面的代码是正确的。

abstract class AbstractClass
{
    public abstract void AbstractMethod1();
    public abstract void AbstractMethod2();
    public void NotAbstractMethod3(){ }
}

其中的方法NotAbstractMethod3就是非抽象方法,只是该方法对其他类不可见,只对抽象类的子类可见。

 

5 继承的子类没实现其中所有的抽象方法,那么这个子类也是抽象类

abstract class AbstractClass
{
    public abstract void AbstractMethod1();
    public abstract void AbstractMethod2();
}

class ChildClass:AbstractClass
{
    public override void AbstractMethod1()
    {
        Console.WriteLine("AbstractMethod1");
    }
    public override void AbstractMethod2()
    {
        Console.WriteLine("AbstractMethod2");
    }
}

abstract class AbstractChildClass:AbstractClass
{
    public override void AbstractMethod1()
    {
         Console.WriteLine("AbstractMethod1");
    }
}

上面的代码中,ChildClass类实现了抽象类AbstractClass的所有方法,所以为非抽象类,但是AbstractChildClass类并没有实现抽象类AbstractClass的所有方法,所以自己也必须声明为抽象类,否则会提示:AbstractChildClass不实现继承的抽象成员AbstractMethod2()。

 

6 抽象方法也是虚拟的,但是不需要提供关键字virtual

下面的代码会报错,提示:方法必须声明主体,因为它未标记为abstract,extern,partial。

abstract class AbstractClass
{
    public virtual void AbstractMethod1();
    public virtual void AbstractMethod2();
}


 

 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值