C# 抽象类和抽象方法知识总结
来源:互联网 发布:淘宝用红包怎么充话费 编辑:程序博客网 时间:2024/05/29 18:45
1 抽象类不能被实例化
定义抽象类AbstractClass:
abstract class AbstractClass{ public abstract void AbstractMethod1(); public abstract void AbstractMethod2();}
对其实例化:
AbstractClass acec = new AbstractClass();
会提示:
无法创建抽象类和接口的实例。
就算为抽象类定义公开的构造方法,同样也是无法实例化的。
因为设计抽象类的初衷就是被用来继承的,而不是为了实例化的。
2 抽象方法没有方法主体
很显然下面的代码会出错,会提示:方法AbstractMethod1无法声明主体,因为它被标记为abstract。
abstract class AbstractClass{ public abstract void AbstractMethod1() { Console.WriteLine("AbstractMethod1"); }}
抽象方法必须在子类中重写。
3 如果类包含抽象方法,类必须是抽象类
下面的代码同样是不对的,会提示:方法AbstractMethod1是抽象的,但是它包含在非抽象类AbstractClass中。
class AbstractClass{ public abstract void AbstractMethod1();}
4 抽象类可以包含非抽象的方法
下面的代码是正确的。
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();}
- C# 抽象类和抽象方法知识总结
- C#的抽象类和抽象方法
- C#抽象类和抽象方法
- C#抽象类和抽象方法
- C#抽象类和抽象方法
- C#抽象类和抽象方法
- C#抽象类和抽象方法
- C# 抽象类和抽象方法
- C#抽象类和抽象方法
- C#之抽象类和抽象方法
- C#中的抽象类和抽象方法
- C# 抽象类和抽象方法
- C# 抽象类和抽象方法详解
- C#抽象类和抽象方法
- C# 抽象方法和抽象类
- C#抽象方法和抽象类
- c#抽象类和方法
- c#抽象类和方法
- delphi7生成exe文件的方法
- Struts2设置等待页面
- OpenSSL命令---smime
- JAVA 正则表达式、汉字正则、 java正则代码
- 用cpio命令解压cpio.gz文件及做磁带备份
- C# 抽象类和抽象方法知识总结
- HttpComponents —— HTTP请求(HttpRequest)
- 顺序表
- Accelerated C++ Exercise 10-0(main函数参数)
- android 开发中惯用颜色,以及一些颜色的代码
- 本体开发导论——A Introduction to Ontology Development
- hdu 361B
- SAP Sybase SQLAnywhere 12的一次unload/reload来重建数据库
- 堆排序