Java之接口
1.接口的相关概念与定义
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
我们可以将接口看作是一个特殊的类,调用这个接口的类需要实现其中的一切方法,所以又可以将他视作为一个特殊的抽象类。
比如说我们有一个打电话这个功能的接口,还有一个听音乐的接口。现在我们日常生活中,手机可以打电话听音乐,智能手表也可以打电话听音乐。但是Java中不允许多重继承,所以我们需要接口来解决问题。
2.简单的例子
我们先创建两个接口,一个是IPhoto照相的接口,一个是ICall打电话的接口。
public interface ICall {
public void call();//打电话的方法
int years =10;
}
public interface IPhoto {
public void photo();//照相的方法
int camera = 1000;
}
然后我们定义一个智能手表和智能手机类,分别继承上面两个接口。实现其中的photo和call类。
public class SmartPhone implements ICall, IPhoto {
@Override
public void photo() {
// TODO Auto-generated method stub
System.out.println("这个电话可以照相");
System.out.println("这个相机的像素是"+IPhoto.camera);
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("这个电话可以打电话");
System.out.println("这个电话最多能打"+ICall.years+"年");
}
}
public class SmartPhone implements ICall, IPhoto {
@Override
public void photo() {
// TODO Auto-generated method stub
System.out.println("这个电话可以照相");
System.out.println("这个相机的像素是"+IPhoto.camera);
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("这个电话可以打电话");
System.out.println("这个电话最多能打"+ICall.years+"年");
}
}
下面我们添加测试类
public class DigitalTest {
public static void main(String[] args) {
IPhoto phone1 = new SmartPhone();
phone1.photo();
ICall phone2 = new SmartPhone();
phone2.call();
}
}
我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。
这里我们通过接口实例化对象photo1和photo2,他们只能实现他们自己接口内部定义的方法。phone1就无法实现call这个方法。
我们运行这段代码结果是
这也体现了java中的多态性。
3.接口的继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
下面我们举一个具体的例子。
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// 文件名: Football.java
public interface Basketball extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
// 文件名: Hockey.java
public interface Soccer extends Sports
{
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
这就实现了接口的继承。