1.概念:一种特殊的类,有全局常量和公共方法组成
定义接口用interface关键字
2.语法: //中括号“[ ]”的含义:你可继承父接口,也可不继承,是可选的
[修饰符] (abstract) interface 接口名[extends 父接口1,父接口2...] //接口可继承多个父接口(即:接口是多继承的);abstract若没写,系统会自动加上
{
0个到多个常量定义...
0个到多个抽象方法的定义...
}
接口就是用来被继承,被实现的,修饰符一般建议用public
注意:不能使用private和protected修饰接口
3.接口定义:
常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。
方法:接口的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。
4.一个类可以实现一个或多个接口,实现接口使用implement关键字,Java中一个类能继承一个父类,是不够灵活的,可通过实现多个接口来补充
继承父类实现接口的语法为:
[修饰符] class 类名 extends 父类 implement 接口1,接口2...
{
类体部份 //如果继承了抽象类,需要实现继承的抽象方法;如果遵守了一个接口,就要实现接口中的抽象方法
}
如果要继承父类,继承父类必须在实现接口之前
例:
abstract class Telphone{ //此父类只是用来约束子类,所以可以定义成抽象类
public abstract void call(); //在抽象类里若想要约束子类,就可定义为抽象方法 抽象方法没有方法体以分号结束
public abstract void message();
}
class Cellphone extends Telphone{
public void call(){ //实现抽象类里要求的方法call
System.out.println("通过键盘来打电话");
}
public void message(){ //实现抽象类里要求的方法message
System.out.println("通过键盘来发短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通过语音来打电话");
}
public void message(){
System.out.println("通过语音来发短信");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象
tel1.call(); //通过引用就可以打电话
tel1.message(); //通过引用就可以发短信
Telphone tel2=new Smartphone(); //通过父类的引用指向智能手机的对象
tel2.call();
tel2.message();
}
}
interface IplayGame{
public void PlayGame();
}
abstract class Telphone{ //此父类只是用来约束子类,所以可以定义成抽象类
public abstract void call(); //在抽象类里若想要约束子类,就可定义为抽象方法 抽象方法没有方法体以分号结束
public abstract void message();
}
class Cellphone extends Telphone implements IplayGame{
public void call(){ //实现抽象类里要求的方法call
System.out.println("通过键盘来打电话");
}
public void message(){ //实现抽象类里要求的方法message
System.out.println("通过键盘来发短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通过语音来打电话");
}
public void message(){
System.out.println("通过语音来发短信");
}
public void PlayGame(){
System.out.println("具有玩游戏的功能");
}
}
class psp implements IplayGame{ //不能继承phone抽象类,但psp有游戏的特性,所以要遵守IplayGame接口
public void PlayGame(){
System.out.println("具有玩游戏的功能");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象类的父类引用指向一个子类对象,先创建一个普通的电话的对象
tel1.call(); //通过引用就可以打电话
tel1.message(); //通过引用就可以发短信实现了接口的对象
Telphone tel2=new Smartphone(); //通过父类的引用指向智能手机的对象
tel2.call();
tel2.message();
IplayGame ip1=new Smartphone(); //ip1接口引用指向一个实现了接口的对象
ip1.PlayGame();
IplayGame ip2=new psp();
ip2.PlayGame();
IplayGame ip3=new IplayGame();{ //new一个接口的代码 输出:通过键盘来打电话 或者:new IplayGame(){
public void PlayGame(){ 通过键盘来发短信 public void PlayGame(){
System.out.println("使用匿名内部类的方式实现接口"); 通过语音来打电话 System.out.println("使用匿名内部类的方式实现接口");
} 通过语音来发短信 }
}; 具有玩游戏的功能 }
ip3.PlayGame(); 具有玩游戏的功能
} 使用匿名内部类的方式实现接口
}
使用接口:
接口在使用过程中,还经常与匿名内部类配合使用
匿名内部类:没有名字的内部类,多用于关注实现而不关注实现类的名称
例://直接new一个接口,直接在接口里实现这个代码
interfacce i=new interface(){
public void method(){
System.out.println("匿名内部类实现接口的方式");
}
};