1.概念
- 接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成。
- 类是一种具体的实现体,而接口则是定义了某一批类所需要遵守的规则,接口不关心这些类的内部数据也不关心这些类内部方法的实现细节,它只规定这些类必须提供某些方法。
2.关键字
- 和类定义不同定义接口不使用class关键字,而是用interface关键字。
3.语法格式
- [修饰符] abstract interface 接口名 [extends 父接口1,父接口2……]{
0到多个常量定义;
0到多个抽象方法的定义;
}
【注意:接口是用来被继承、被实现的,修饰符一般使用public】
4.接口定义
常量:
接口当中的属性是常量,即public static final修饰属性,即使定义时不添加,系统也会自动添加。方法:
接口当中的方法只能是抽象方法,使用public abstract修饰,即使定义时不添加,系统也会自动添加。
接口中的方法没有方法体 。
当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。
接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。
修饰符
抽象类及抽象方法不能被final修饰符修饰。final和abstract 不能连用,同样private和abstract不能连用。
接口中的成员变量默认都是public、static、final类型的,必须被显式初始化。
接口中的方法默认都是public、abstract类型的。
5.使用接口
一个类可以实现一个或多个接口,实现接口使用implements关键字,java中一个类只能继承一个父类,是不够灵活的通过实现多个接口可以做补充。
继承父类实现接口的语法为:
[修饰符] class 类名 extends 父类 implements 接口1,接口2……{
//类题部分,如果继承了抽象类,需要实现继承的抽象方法,要实现接口的抽象方法
}
6.代码
接口
public interface IPlayGame {
public void IPlayGame();
}
实现接口
public class Psp implements IPlayGame {
public void IPlayGame() {
// TODO Auto-generated method stub
System.out.println("psp具有玩游戏的功能!!");
}
}
继承父类实现接口
public class HuaWei extends Telphone implements IPlayGame{
public void call() {
// TODO Auto-generated method stub
System.out.println("可以通过WIFI打电话!");
}
public void message() {
// TODO Auto-generated method stub
System.out.println("可以通过虚拟键盘发短信!");
}
public void IPlayGame() {
// TODO Auto-generated method stub
System.out.println("HuaWei手机可以玩游戏!!");
}
}
另一个不需要继承父类的类实现接口
public class Psp implements IPlayGame {
public void IPlayGame() {
// TODO Auto-generated method stub
System.out.println("psp具有玩游戏的功能!!");
}
}
测试类
IPlayGame ipg=new HuaWei();
ipg.IPlayGame();
IPlayGame ipg2=new Psp();
ipg2.IPlayGame();
结果:
HuaWei手机可以玩游戏!!
psp具有玩游戏的功能!!
7.匿名内部类
定义:在接口的使用过程中,经常与匿名内部类配合使用。
匿名内部类就是没有名字的内部类,多用于关注实现不关注实现类的名称。命名格式:
interface i=new interface(){
public void method(){
System.out.println(“匿名内部类的实现方法”);
}
};
i.method();//接口的引用直接调用method方法- 代码
测试类中:
方法一
IPlayGame ipg3=new IPlayGame(){
public void IPlayGame() {
// TODO Auto-generated method stub
System.out.println("使用匿名内部类的方式实现接口!");
}
};
ipg3.IPlayGame();//接口的引用直接调用playgame方法
方法二(常用这种方式)
new IPlayGame(){
public void IPlayGame() {
System.out.println("使用匿名内部类的方式实现接口2!");
}
}.IPlayGame();