接口是用来建立类与类之间的协议,接口所提供的只是一种形式,而没有具体实现,这一点与抽象类很相似,而java大多时候选择大量使用接口而不是抽象类,有这样一个原因。
在java中一般使用单一继承,也就是说,一个类通常只继承一个父类。但是却可以使用多个接口,这样让类的方法更多,而且大大减少了代码冗余度
[接口修饰符] interface 接口名[extends 接口1,接口2....]
{
//声明变量;
//抽象方法;
}
例如
public interface Animal
{
public void sleep();//睡觉
public void eat();//吃饭
public void run();//奔跑
}
上述接口为动物的基本生活习性
public interface Mamma {
public void temperature();//血液温度
public void backbone();//脊椎
public void viviparity();//胎生
}
上述接口为哺乳动物的基本特征
这样我们在描述一个动物时,会用到上述的两个接口,很显然,在某个特定的动物类中我们无法继承两个父类,却可以同时使用另个接口;
接口的实现
class 类名 implements 接口名
{
.....
}
举例
public class Tiger implements Animal,Mamma {
@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("the tiger sleep in night");
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("the tiger eat meat");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("the tiger can run fast");
}
@Override
public void temperature() {
// TODO Auto-generated method stub
System.out.println("tiger is always have warm temperature");
}
@Override
public void backbone() {
// TODO Auto-generated method stub
System.out.println("tiger has backbone");
}
@Override
public void viviparity() {
// TODO Auto-generated method stub
System.out.println("tiger is viviparity");
}
}
我们建立一个老虎类,众所周知,老虎不仅是动物,而且是哺乳类动物。这样此类就可以同时使用这两种接口来对老虎进行描述
我们在建立一个主类进行测试
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Tiger test = new Tiger();
test.eat();
test.sleep();
test.run();
test.backbone();
test.temperature();
test.viviparity();
}
}
跑起来的结果就是这样的
the tiger eat meat
the tiger sleep in night
the tiger can run fast
tiger has backbone
tiger is always have warm temperature
tiger is viviparity
ps:
需要注意的是,接口的名字必须要与文件名相同,理论上来讲,每一个public类对应一个文件,这样使得更为清晰严谨。