1.接口:
接口中所有的方法都没有实现,只有声明;(接口更加像契约模式,继承接口的类必须按照一种固定模式来实现接口的方法)
接口的定义:
访问权限 interface I接口名
{
}
注意:1.接口中只能有属性和方法(只有声明没有定义),不能有字段;
2.成员不需要写访问权限,一定为public;
3.接口可以被接口(不需要实现父接口的方法)或类(如果不是抽象类,必须显式实现接口的所有方法)继承,可以多继承;
4.接口不能被实例化,但是可以创建接口的引用;
2.abstract抽象类:
(不能被实例化,但是可以创建抽象类的引用)
抽象方法:1.在函数返回值前加上abstract关键字(不需要实现)
抽象类:第一种情况:直接在class关键字前加上abstract关键字(可以没有抽象方法)
第二种情况:类中函数一个或一个以上抽象方法的类,必须为抽象类;
//形状类
public abstract class Shape //Shape抽象类
{
public abstract float GetArea();//抽象方法:C++的纯虚函数
public virtual float getLength() //虚函数,不是抽象函数
{
return 0;
}
}
接口和抽象类的区别:
1.接口是设计的结果,抽象类是重构的结果;
2.接口可以多继承,类只能被单继承;
3.接口不能有字段,抽象类可以有字段;
4.接口中的所有方法都没有实现,抽象类中可以有不是抽象的方法;
5.接口中的所有方法都必须为public,抽象类可以不需要;
6.如果一个类继承于接口,必须实现接口中的所有方法;
如果一个类继承于抽象类,如果不实现抽象类的方法,则继续为抽象类;
接口和抽象类的用途区别:
接口
- 规范和约束:接口用于定义一组方法和属性的约定,任何实现该接口的类必须提供这些方法和属性的实现。
- 松耦合:接口可以降低代码之间的耦合度,使得代码更加灵活和可维护。例如,依赖注入通常使用接口来实现。
- 多态性:接口允许不同的类以相同的方式被使用,实现多态性。
抽象类
- 代码复用:抽象类可以提供通用的实现,派生类可以继承这些实现,从而减少代码重复。
- 模板模式:抽象类可以定义一个算法的骨架,并将一些步骤延迟到子类中实现。
- 强约束:抽象类可以提供更强的约束,确保派生类实现特定的逻辑或属性。
区别总结
- 实现:接口不能包含方法的实现,抽象类可以包含。
- 继承:一个类可以实现多个接口,但只能继承一个抽象类。
- 用途:接口适用于定义一组不相关类的共同契约,抽象类适用于具有相似实现的类的代码复用和强约束。