- 接口
接口定义了所有类继承接口时应遵循的语法合同。
接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么 做" 部分。
接口定义了属性、方法和事件,这些都是接口的成员。
接口只包含了成员的声明。
成员的定义是派生类的责任。
接口提供了派生类应遵循的标准结构。
接口使得实现接口的类或结构在形式上保持一致。
抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有 少数方法由基类声明由派生类实现时。
1.定义接口:
接口使用 interface 关键字声明,它与类的声明类似。
接口声明默认 是 public 的。
通常接口命名已I字母开头。
interface 接口名
{
//接口代码
}
2.接口继承接口(多个接口用,号进行区分):
interface 接口名:继承的接口名
{
//接口的代码
}
3.类实现接口:
访问修饰符 class 类名:接口名
{
//实现接口的方法
}
4.一个类如何又继承类又实现接口:
访问修饰符 class 类名:父类名称,接口名称
{
//实现接口的方法
}
2.抽象类
抽象类主要用来提供多个派生类可共享的基类的公共定义,
它与非抽象类的主要区别如下:
1.抽象类不能直接实例化
2.抽象类可以包含抽象成员,但非抽象类不可以。
3.抽象类不能被密封。
C#中声明抽象类时需要使用abstract关键字。
1.定义一个抽象类:
访问修饰符 abstract class 类名:基类或接口
{
//继承的关系可以写,也可以不写
//类成员
}
- 抽象方法
抽象方法就是在声明方法时,加上abstract关键字,声明抽象方法时 需要注意以下两点:
- 抽象方法必须声明在抽象类中。
- 声明抽象方法时,不能使用virtual,static和private修饰符。
抽象方法声明引入了一个新方法,但是不提供该方法的实现,由于 抽象方法不提供任何实际实现,因此抽象方法的方法体只包含一个分号。
1.抽象方法的声明:
public abstract 返回数据类型/void 方法名();
- 抽象方法和接口的区别
1.它们的派生类只能继承一个基类,即只能直接继承一个抽象类,但可以继承任意多个接口。
2.抽象类中可以定义成员的实现,但接口中不可以。
3.抽象类中可以包含字段,构造函数,析构函数,静态成员或常量等,接口不可以。
4.抽象类中的成员是私有的(只要它们不是抽象的),受保护的,内部的或受保护的内部成员(受保护的内部成员只能在应用程序的代码或派生类中访问),但接口中的成员必须是公共的。
抽象类和接口这两种类型用于完全不同的目的。抽象类主要用于作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。