Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。
使用关键字interface来定义一个接口。分为接口的声明和接口体。
(1)接口声明:接口通过使用关键字interface来声明,格式:
接口的名字
(2)接口体: 接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾 。
interface Printable{
final int MAX=100;
void add();
float sum(float x ,float y);
}
3)接口的使用: 一个类通过使用关键字implements 声明自己实现一个或多个接口。如果实现多个接口,用逗号隔开接口名,如:
,Addable
如果一个类实现某个接口,那么这个类必须实现该接口的所有方法,即为这些方法提供方法体。
要注意的是,接口中的方法被默认是public和abstract的,接口在声明方法时可以省略方法前面的public和abstract关键字,但是,类在实现接口方法时,一定要用public来修饰。
类实现的接口方法以及接口中的常量可以被类的对象调用。
extends声明一个接口是另一个接口的子接口。
一个类可以实现多个接口,接口可以增加很多类都需要实现的功能,不同的类可以使用相同的接口,同一个类也可以实现多个接口。
如,轿车、飞机、轮船等,可能也需要具体实现“收取费用”和“调节温度”的功能,而它们的父类可能互不相同。
接口只关心功能,并不关心功能的具体实现,使用同一接口的类在实现接口中的方法时,可以给出不同的方法体。
如“客车类”实现一个接口,该接口中有一个“收取费用”的方法,那么这个“客车类”必须具体给出怎样收取费用的操作,即给出方法的方法体,不同车类都可以实现“收取费用”,但“收取费用”的手段可能不相同,这是功能“收取费用”的多态,即不同对象调用同一操作可能具有不同的行为。
接口的思想在于它可以增加很多类都需要实现的功能,使用相同的接口类不一定有继承关系。
接口回调
接口回调是多态的另一种体现。
1. 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称作对象功能的接口回调。接口回调可能产生不同的行为。
interface ShowMessage{
void showTradeMark();
}
class TV implements ShowMessage{
public void showTradeMark(){
我是电视机");
}
}
class PC implements ShowMessage{
public void showTradeMark(){
我是电脑");
}
}
public class Example5_12{
public static void main(String args[]){
声明接口变量sm
接口变量sm中存放对象的引用
接口sm回调showTradeMark()方法
接口变量sm中存放对象的引用
接口回调
}
}
2.接口做参数
当一个方法的参数是一个接口类型时,如果一个类实现了该接口,那么就可以把该类的实例的引用传值给该参数,参数可以回调类实现的接口方法。
interface Show{
void show();
}
class A implements Show{
public void show(){
System.out.println("I love This Game");
}
}
class B implements Show{
public void show(){
我喜欢看NBA");
}
}
class C{
接口作为参数
s.show();
}
}
public class Example5_13{
public static void main(String args[]){
C c=new C();
c.f(new A());
c.f(new B());
}
}