1、概念
接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法
2、接口定义
[修饰符] interface 接口名 [extends 父接口1,父接口2...]
{
零到多个常量定义...
零到多个抽象方法定义...
}
注:
a. 接口就是用来被继承、被实现的,修饰符一般建议用public,不能使用private和protected修饰接口
b. 接口默认添加abstract修饰符
c. 接口中的属性是常量,即使定义时不添加public static final 修饰符,系统也会自动加上
d. 接口中的方法只能是抽象方法,即使定义时不添加public abstract 修饰符,系统也会自动加上
3、使用接口
一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
4、继承父类实现接口的语法
[修饰符] class 类名 extends 父类 implements 接口1, 接口2...
{
类体部分//如果继承了抽象类,需要实现继承的抽象方法; 要实现接口中的抽象方法。
}
5、使用
定义接口:
public interface IPlayGame {
public void playGame(); //接口方法中不能有方法体
}
类实现接口1:
public class SmartPhone extends Telephone implements IPlayGame{
@Override
public void call() {
System.out.println("通过语音打电话");
}
@Override
public void message() {
System.out.println("通过语音发短信");
}
@Override
public void playGame() {
System.out.println("具有了玩游戏的功能");
}
}
类实现接口2:
public class Psp implements IPlayGame {
@Override
public void playGame() {
System.out.println("具有了玩游戏的功能");
}
}
使用:
public class Initail {
/**
* @param args
*/
public static void main(String[] args) {
IPlayGame ip1 = new SmartPhone();
ip1.playGame();
IPlayGame ip2 = new Psp();
ip2.playGame();
}
}
6、与匿名内部类配合使用
匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称
public class Initail {
/**
* @param args
*/
public static void main(String[] args) {
//使用方式1
IPlayGame ip3 = new IPlayGame() {
@Override
public void playGame() {
System.out.println("使用匿名内部类的方式实现接口1");
}
};
ip3.playGame();
//使用方式2
new IPlayGame() {
@Override
public void playGame() {
System.out.println("使用匿名内部类的方式实现接口2");
}
}.playGame();
}
}