C# 抽象类和抽象方法知识总结
2013-11-20 21:49
501 查看
1 抽象类不能被实例化
定义抽象类AbstractClass:
对其实例化:
会提示:
无法创建抽象类和接口的实例。
就算为抽象类定义公开的构造方法,同样也是无法实例化的。
因为设计抽象类的初衷就是被用来继承的,而不是为了实例化的。
2 抽象方法没有方法主体
很显然下面的代码会出错,会提示:方法AbstractMethod1无法声明主体,因为它被标记为abstract。
抽象方法必须在子类中重写。
3 如果类包含抽象方法,类必须是抽象类
下面的代码同样是不对的,会提示:方法AbstractMethod1是抽象的,但是它包含在非抽象类AbstractClass中。
4 抽象类可以包含非抽象的方法
下面的代码是正确的。
其中的方法NotAbstractMethod3就是非抽象方法,只是该方法对其他类不可见,只对抽象类的子类可见。
5 继承的子类没实现其中所有的抽象方法,那么这个子类也是抽象类
上面的代码中,ChildClass类实现了抽象类AbstractClass的所有方法,所以为非抽象类,但是AbstractChildClass类并没有实现抽象类AbstractClass的所有方法,所以自己也必须声明为抽象类,否则会提示:AbstractChildClass不实现继承的抽象成员AbstractMethod2()。
6 抽象方法也是虚拟的,但是不需要提供关键字virtual
下面的代码会报错,提示:方法必须声明主体,因为它未标记为abstract,extern,partial。
定义抽象类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# 2014-02-10 01:55 1675人阅读 评论(0) 收藏
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
- C#基础知识整理:基础知识(6) 抽象类和抽象方法
- C# 抽象类(知识要点归纳总结)
- C# 接口和抽象类的区别和使用场合(知识要点归纳总结)
- C#基础知识整理:基础知识(6) 抽象类和抽象方法
- C#基础知识整理:基础知识(6) 抽象类和抽象方法
- C# 接口(知识要点归纳总结)
- javaEE学习_前期小知识文字总结(接口抽象类和多态封装代码块)
- C#学习基础知识总结
- 初读CLR Via C# 知识总结
- C#回顾学习笔记三十一:抽象类与抽象方法
- 黑马程序员_C#面向对象学习知识总结1
- c# 基础知识总结
- C#基础知识总结
- C#基础知识之方法重载总结
- copy 回顾总结:Java中抽象类与抽象方法