11.5 接口——特殊的抽象类
问题:某个子类想继承多个父类的优点,而Java不允许多重继承。
解决:采用接口实现多重继承
接口实质上是一种特殊的抽象类,定义特殊(interface),其内部只能包含静态常量和抽象方法。
11.5.1 接口的声明
接口的定义符不是class,而是interface
interface 接口名 { //类体:只能由静态常量或抽象方法组成 }
接口中的常量默认为 public static final 类型。
如接口中定义:
double PI = 3.14;
则实际为:
public static final double PI = 3.14;
******
也就是说,接口中定义的变量默认为静态常量型(public static final)。即使在定义过程中未声明为public static final,变量也默认为静态常量型。
******
interface infa { double PI = 3.14; //变量即使未写public static final,该变量也是默认public static final型 abstract void out(); //方法默认为抽象方法 }
11.5.2 接口之间的继承
a. 接口可以继承父接口的成员变量和方法。
b. 接口支持多重继承,可以有多个父类。
interface 子接口 extends 父接口1,父接口2,...
11.5.3 接口的实现
a. 我们定义接口是为了使用它实现多重继承。
b. 接口是特殊的抽象类。
c. 要使抽象类发挥功能,必须通过其非抽象子类覆盖掉父类中的所有抽象方法来实现对象。
在Java中,要让接口发挥其功能,需要定义一个子类,实现并覆盖掉接口中的所有抽象方法——即接口的实现。
d. 实现接口是通过关键字 implements 来声明的。
public class Example1109
{
public static void main(String[] args)
{
SonClass sc = new SonClass();
sc.out();
}
}
//SonClaa类继承了父接口infa,并实现了父接口的抽象方法
class SonClass implements infa //implements infa->实现接口infa { public void out() //覆盖接口中的所有抽象方法 { System.out.println(PI); } }