1.概念理解
接口(英文:Interface),在 Java 语言中是一个抽象类型,是抽象方法的集合,接口通常用 interface 来声明。一个类通过继承接口的方式,从而来继承并且实现接口中的抽象方法。
接口和类并不一样,但是编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义并实现接口中的所有抽象方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 语言中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
1.1 接口与类的相似点
①一个接口可以有多个方法。
②接口文件保存在 .java 的源文件中,文件名使用接口名。 (如果此接口与其他类定义在同一个 .java 源文件下,则不会出现以此接口命名的 .java 源文件,只会出现包含 main 方法对应类名的 .java 源文件)
③接口的字节码文件保存在 .class 结尾的二进制文件中。(无论此接口是否与其他类定义在同一个 .java 源文件下,只要编译,就会生成所有的类名、接口名命名的 .class 字节码文件)
关于②、③两条内容,大家在创建相应的类、接口之后,可以在 bin 文件夹和 src 文件夹下查看相应的 .java、.class文件。
④接口相应的字节码文件必须在与包名称相匹配的目录结构中。(如果是默认包,则在根目录下)
1.2 接口与一般类的区别
①接口不能用于实例化对象,而类可以(不包括抽象类)。
②接口没有构造方法,接口中所有的方法必须是抽象方法。
③接口不能包含成员变量,除了 static 和 final 变量。
④接口不是被类继承,而是要被类实现。(虽然我们要使用类去继承接口,但实际上是对接口中的抽象方法的具体实现)
⑤接口支持多继承,但是类不可以多继承。
1.3 接口与抽象类的区别
①抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
②抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
③接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类中可以有静态代码块和静态方法。
④一个类只能继承一个抽象类,而一个类却可以(继承)实现多个接口。
1.4 接口的特性
①接口是隐式抽象的,当声明一个接口的时候,不必使用 abstract 关键字。
②接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错),声明时同样不需要 abstract 关键字。
③接口中可以包含变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
④接口中的方法是不能在接口中实现的,只能由实现这个接口的类来实现接口中的方法,接口中的方法都是公有的。
1.5 接口的实现
①当类实现接口的时候,类要实现接口中所有的方法。否则,该类必须声明为抽象的类。
②类使用 implements 关键字实现接口。
下面,我们来看一下声明接口以及使用类去实现接口的具体实例:👇👇👇
2.应用举例
2.1 类实现接口
//文件名:LikeAnimal.java
public interface LikeAnimal {//声明一个接口
public void eat();//接口中的两个公共方法
public void travel();//等待继承此接口的类来实现
}
//文件名:Tiger.java
public class Tiger implements LikeAnimal {//Tiger类继承LikeAnimal接口
public void eat() {//实现接口中的eat()抽象方法
System.out.println("老虎正在吃饭!");
}
public void travel() {//实现接口中的travel()抽象方法
System.out.println("老虎喜欢旅行!");
}
public String park() {//此类额外创建了一个新方法
return "公园里有很多只老虎!";
}
}
//文件名:PlayAnimal.java
public class PlayAnimal {
public static void main(String[] args) {
Tiger a=new Tiger();//实例化一个对象
a.eat();//通过Tiger类对LikeAnimal接口中方法的具体实现,来调用这些方法
a.travel();
System.out.println(a.park());
}
}
大家可以根据代码以及相应的注释,仔细理解一下,程序运行结果如下:👇👇👇
2.2 接口间的单继承
类继承接口,通过 implements 关键字来实现。
接口继承接口,通过 extends 关键字来实现。(和类与类之间的继承是一样的)
//文件名:Sports.java
public interface Sports {
public void play();
public void happy();
public int interesting(int a);
}
//文件名:Basketball.java
public interface Basketball extends Sports {
public void perfect();
public String together(String name1,String name2);
public int friends(int x);
}
//文件名:Football.java
public interface Football extends Sports {
public void good();
public void nice();
}
在 Sports 接口中,自己声明了 3 个方法,所以实现 Sports 接口的类需要编写这 3 个方法。
在 Basketball 接口中,自己声明了 3 个方法,并且从 Sports 接口中继承了它的 3 个方法。所以实现 Basketball 接口的类需要编写 3+3=6 个方法。
在 Football 接口中,自己声明了2个方法,并且从 Sports 接口中继承了它的3个方法。所以实现 Football 接口的类需要编写 2+3=5 个方法。
2.3 接口间的多继承
public interface Player extends Basketball,football {
...(具体的代码段)
}
接口 Player 同时继承了 Basketball,football 两个接口。
这里就不再详细说了,大家知道接口间不仅可以单继承,也可以多继承就可以了,后面学习的过程中还是会用到的!!!
2.4 标记接口
最常用的继承接口是没有包含任何方法的接口。
标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。
标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。
public interface Animal {
}
没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:
①建立一个公共的父接口。②向一个类添加数据类型。
以上就是博主总结的 Java 语言中接口的一些相关概念,希望对大家的学习有所帮助。在后面的博文中,我们将进入“多态”的学习!!!😀😀😀