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

来源:互联网 发布:淘宝用红包怎么充话费 编辑:程序博客网 时间:2024/05/29 18:45

抽象类不能被实例化

 定义抽象类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();}


 

 

原创粉丝点击