虽说在Java中接触过抽象类和接口的概念,这次C#学习中再次接触时,仍然觉得挺别扭的。这是两个很爱混淆的概念,可能很多人都存在着疑问,这两个概念是不是可以被相互替代,存在的意义是什么?该如何区分?我也存在相同的问题,感觉很糊涂,因此查了一些资料。这是我的一点看法:
一、抽象类
不象具体类那样描述一类具体事物。在现实世界存在许多抽象的东西,如刮风下雨、季节变化等,甚至是一些抽象的概念。
例如将哺乳动物作为一个抽象类,老虎类、猩猩类都是哺乳动物类的子类。老虎类作为一个具体的类可以实现哺乳动物类的所有抽象方法。但却不能用哺乳动物类来实例化为一个具体的事物。
二、接口
接口是不相关的对象之间进行相互交互的设备。在程序设计中,往往也希望类隐藏其处理的特定事物的细节,对外界仅公布它必须支持的属性。接口机制提供了实现这种方式的途径。接口同样不可以实例化为具体的事物。
由此可见,抽象类和接口都不能对其进行实例化操作,且在派生类中必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。
那么这二者为何不能相互代替,如何区分呢?我认为最重要抓住两点:
1。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类);
2。接口中声明的所有方法都必须且只能在派生类中实现,但抽象类中可以定义自己的方法,只有其中声明的抽象方法才必须在派生类中实现。
我想抓住这两点,很多情况下我们就可以区分该选择抽象类还是接口来实现了。