什么是接口
将抽象进行得更彻底,使所有方法都是抽象方法,所有方法都不提供具体的实现一种更为特殊的"抽象类",接口中大部分都是抽象方法,不能实例化,类不能继承接口,只能"实现"接口所定义的方法,接口不是类。虽然编写接口类似于编写一个类,但它们是两个不同的概念。类描述了对象的属性和行为,而接口包含了一个类需要实现的行为
接口与类之间的不同之处
①接口不能被实例化;
②接口不包含任何构造器;
③接口中大部分方法都是抽象的;
④接口中不能包含实例成员变量。唯一可以出现在接口中的成员变量必须是同时声明为static和final;
⑤接口不能被一个类继承,只能被一个类来实现;
⑥一个接口能够继承多个接口。
接口的特点:
(JDK1.8之前)
1、接口文件和类文件一样,同样需要进行编译成.class结尾的文件
2、接口和抽象类一样,同样不能被实例化
3、接口中的所有方法,都必须是抽象的,不能拥有方法体(JDK1.8之后有所改变)
4、接口中的所有方法,默认访问修饰符都是public,而且是可写可不写
5、接口中不能定义构造器,以及任何静态|实例初始化代码
6、接口中不能定义"实例成员变量",只能定义公开的静态常量
7、接口中可以定义无限个静态常量,以及无限个抽象方法
接口中定义的方法,绝大多数都是抽象的,所以接口是无法被实例化的,接口中的方法必须要由
实现类来进行实现。接口中所有的抽象方法都需要由实现类进行实现,除非实现的类是一个抽象类
(JDK1.8以后)
1、接口中可以添加非抽象方法,但是需要使用default关键字进行声明
2、接口中不能声明实例成员,但是可以声明静态成员(此时声明的静态成员,就不是跟类有关系
而是跟接口有关系)
接口的使用规则
接口中,可以定义静态方法,但是要有方法体一旦定义以后,该方法不需要子类实现,因为这个方法跟子类没关系,只跟接口有关系
接口中放置的方法:是给类进行扩展新的行为的方法,默认都是抽象方法,但是如果某些扩展行为的实现方法,在很多子类上都是一样的,,那么我们就可以把它们提到接口中来进行统一管理,但是这种方法必须要使用default关键字来进行定义,方法的访问修饰符依旧是public
①接口默认是抽象的。在声明接口时,不需要使用关键字abstract;
②接口中的每一个方法默认也是抽象的,所以也不需要关键字abstract;
③接口中的方法默认访问级别是public。 在编写接口的时候通常用public关键字,
但是如果我们不显式地将接口中的方法声明为public,它仍然将是public的。
接口和抽象类的区别
从语法上来讲:
1、接口是采用interface来定义的,而抽象类是采用abstract来定义的
2、接口不能放置构造器,实例成员,初始化块,但是抽象类可以放置
3、抽象类中所有的抽象方法必须采用abstract来定义,而接口中的方法默认就是abstract
4、接口是通过implements来实现的,而抽象类是通过extends来实现的
5、抽象类的父类是Object,而接口的父类是不知道的
6、抽象类可以实现接口,但是接口不能继承抽象类
7、抽象类只能单继承,而接口可以多继承,而且可以多实现
从设计上来讲:
接口和抽象类都可以定义抽象方法,但是抽象类中的抽象方法是类"与生俱来"的方法
而接口中的抽象方法是"外部扩展"给类的方法