为了实现像c++中的多继承性,Java中引入了接口的概念,接口和单重继承相结合很好的实现了多重继承的功能。接口和类非常相似,接口用于定义几个类具有的但又不再这些类中定义的功能,通过在接口中设置这些方法,描述出共同的特性,然后由类本身定义如何实现。
接口优先原则: 在一个操作既可以使用抽象类又可以使用接口的时候,优先考虑使用接口。
接口定义: 接口就是由一个抽象方法与全局常量组成的特殊类(JDK8之前)接口使用interface引导,分为接口声明和接口体。在接口体中只进行方法的声明,不能进行方法的实现。
1.Interface是声明接口的关键字,可以把它看成一个特殊的类。
2.声明接口可给出访问控制符,用public修饰的是公共接口,可以被所有的类和接口使用。若接口声明为public,那么接口中的方法和变量也全部为public。如果是默认修饰符的接口,则只能被同一个包中的其他类和接口使用。(一句话:接口可以用访问控制符声明)
3.接口名要求符合Java标识符的规定。(一句话: 接口前加 “ I(大写i) ” 来区分接口与类)
4.接口也具有继承性,定义一个接口时,可以通过extends关键字声明该接口是某个已经存在的父接口或派生接口,它将继承父接口所有的属性和方法,一个接口还可以继承多个父接口,父接口间用逗号隔开。(一句话:接口具有继承性,用extends连接)
5.系统默认接口中所有属性的修饰符都是public static final。
6.系统默认接口中所有方法的修饰符都是public abstract。
7.在接口中对抽象方法声明时,只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即这些接口仅仅只是规定了一组信息的交换、传输和处理的“接口”。通常把对接口功能的”继承“称为”实现“。 (一句话:只有方法声明,没有方法实现)
接口的命名规范: 接口前加 “ I(大写i) ” 来区分接口与类
子类实现接口使用implements关键字,并且子类可以同时实现多个父接口(可以使用接口来实现多继承)一般使用 接口名+Impl 来命名子类
interface IMyInterface{
public static final String MSG = "test";
public abstract void test();
}
interface INews{
public abstract void getNews();
}
class MyInterfaceImpl implements IMyInterface,INews{ //子类实现两个接口
public void test(){
System.out.println(MSG);
}
public void getNews(){
System.out.println(MSG);
}
}
public class Test{
public static void main(String[] args){
IMyInterface myInterface = new MyInterfaceImpl();
myInterface.test();
INews news = new MyInterfaceImpl();
news.getNews();
}
}
//---------------------------
public class Test{
public static void main(String[] args){
IMyInterface myInterface = new MyInterfaceImpl();
//父接口的相互转换
INews news = (INews)myInterface; //因为它们有相同的子类,所以之间可以相互转换
news.getNews();
}
}
一个类实现一个接口,必须给出接口中所有方法的实现。如果不能实现某方法。也必须写出一个空方法。
Java中允许多个类实现同一个接口,这些类之间可以是无联系的,每个类各有自己实现方法的细节,这是与继承机制的不同之处。
接口中只有public权限(不管是属性还是方法,其权限均为public,类中默认是的default)
接口中public 、static 、 final 、 abstract 均可以省略。
阿里编码规约:接口中方法和属性不要加任何修饰符,public也不要加,保证代码简洁性。
//完整格式
interface IMessage{
public static final String MSG = "i am a biter";
public abstract void print();
}
//简化格式
interface IMessage{
String MSG = "i am a biter";
void print();
}
1.1.2
当一个子类既需要实现接口又需要继承抽象类时:
第一步:请先使用extends继承一个抽象类;
第二步:使用implements实现多个接口。
1.1.3
抽象类可以使用implements实现接口,但是接口不能继承(extends)抽象类。
interface IMyInterface{ //接口
String MSG = "test";
void test();
}
abstract class News implements IMyInterface{ //抽象类实现接口
public abstract void getNews();
}
class MyInterfaceImpl extends News{ //子类继承抽象类
public void test(){
System.out.println(MSG);
}
public void getNews(){
System.out.println(MSG);
}
}
1.1.4
接口不可以继承抽象类,接口可以继承接口。
interface A{
void test1();
}
interface B{
void test1();
}
interface C extends A,B{
void test3();
}
class D extends C{
//D要覆写三个接口
}
接口应用
定义操作标准(USB2.0标准)
表示一种能力,进行一项操作
在分布式开发中暴露远程服务方法