接口是java中最重要的概念之一,他可以被理解为一种特殊的类,是由全局变量和公共的抽象方法所组成。
【接口的定义格式】
interface 接口名称{
全局变量;
抽象方法;
}
在接口中的抽象方法必须定义为public访问权限,这是绝对不可以改变的。
有时候经常看到编写接口方法时省略了public,那么就会有很多人以为访问权限是default,实际上是错的。不管写不写,接口中的方法永远是public。
范例:接口的定义
interface A{
public static final String AUTHOR=“丽萨” //定义全局变量
public abstract void print(); //定义抽象方法
public abstract String getInfo(); //定义抽象方法
}
在接口的基本概念中已经明确声明了接口是由全局变量和抽象方法组成的,所以此处的接口定义可以简化如下形式
interface A{
String AUTHOR=“丽萨” //定义全局变量
void print(); //定义抽象方法
String getInfo(); //定义抽象方法
}
与抽象类一样,接口若要使用也必须通过子类,子类通过implements关键字实现接口。
【实现接口】
class 子类 implements 接口A,接口B,....
{}
一个子类可以同时实现多个接口,那么这实际上就拜托了java的单继承局限。
范例:实现接口
package test1;
interface A {// 定义A接口
public String AUTHOR = "丽萨"; // 定义一个全局变量
public void print(); // 定义抽象方法
public String getInfo();// 定义抽象方法
}
interface B { // 定义B接口
public void say(); // 定义抽象方法
}
class X implements A, B { // 子类同时实现两个接口
public void say() { // 覆写B抽象方法
System.out.println("hello word!!!");
}
public String getInfo() {// 覆写A的抽象方法
return "HELLO";
}
public void print() {
System.out.println("作者:" + AUTHOR);
}
}
public class InterfaceDemo01 {
public static void main(String args[]) {
X x = new X();// 实例化子类对象
x.say();// 调用覆写过的方法
x.print();// 调用覆写过的方法
}
}
结果:
hello word!!!
作者:丽萨
以上程序,一个子类同时实现了两个接口,这样在子类中就必须同时覆写两个接口中的全部抽象方法。
【继承抽象类实现接口】
class 子类 extends 抽象类 implements 接口A,接口B...{
}
范例:子类同时继承抽象和实现接口
package test2;
interface A {
public String AUTHOR = "巴马";
public void print();
public String getInfo();
}
abstract class B {
public abstract void say();
}
class X extends B implements A {
public void say() {
System.out.println("hello word!!!");
}
public String getInfo() {
return "HELLO";
}
public void print() {
System.out.println("作者:" + AUTHOR);
}
}
public class InterfaceDemo04 {
public static void main(String args[]) {
X x = new X();
x.say();
x.print();
}
}
结果:
hello word!!!
作者:巴马
因为抽象和接口本身都有抽象方法,所以事项类中必须覆写3个抽象方法,在java中是允许一个抽象类实现多个接口。
抽象类实现接口