一、什么是接口?
在之前的博客中我详述了Java中的继承和Java中的抽象类,那么如果在某一个抽象类中的方法均为抽象方法时,那么这个抽象类就可以定义成一个接口,接口是抽象类与集成的结合,而且能完成类不能完成的多继承。
(1)定义语法:
Java接口是抽象方法的集合,其定义语法为:
访问权限控制符 interface 接口名 [extends 接口列表] {
常量;(接口中变量为 public static final)
抽象方法;(接口中的方法为默认只能为public abstract 方法)
内部类;
}
(2)注意:
通过extends关键字可以使自定义的接口实现继承,但需要注意以下两点:
接口只能继承父接口,不能继承抽象类和普通类。
接口弥补了Java单一继承的缺点(Java中的类只能继承一个父类),即接口可以继承多个父接口,它们之间用英文逗 号隔开。
在JDK8及其以后版本的JDK中,接口内可定义静态方法和默认方法,因此接口内不只有抽象方法。
接口中无默认构造方法,也不能定义
二、两个关系
(1)接口——接口======>extends(继承)
(2)接口——类=======>implements(实现)
a、一个类可以实现多个接口
b、如果一个类实现了一个接口,但没有实现全部抽象方法,则该类必为抽象类。
c、如果多个接口中定义了相同的抽象方法,则在实现类中只实现其中一个即可。
d、接口实现类可以直接使用接口中的常量:
e、接口实现类所实现的多个接口中有常量名相同的常量,则在实现类中不能直接使用,必须使用类名来确定到底调用哪个接口中的常量:
public interface IFather {
int WEIGHT = 100; //接口1
}
public interface IMother {
int WEIGHT = 80; //接口2
}
public abstract class Son implements IFather,IMother{
public static void main(String[] args) {
System.out.println(WEIGHT); //eclipse中,该语句中的WEIGHT报错“The field WEIGHT is ambiguous”
}
}
f、注意:接口中的静态方法实现类无法继承,默认方法实现类可以继承
public interface IFather {
void move();
public static void eat() { //定义静态非抽象方法
System.out.println("用筷子吃饭");
}
}
public class Son implements IFather,IMother{
@Override
public void move() {
System.out.println("骑摩托......"); //重写move()方法
}
}
若重写接口中的eat方法,则会报错:
三、结语
接口在Java程序的编写中有着重要的作用,在后续的博客中我还会写道,以上就是对Java中接口的详述。