接口(interface)
接口(interface)
接口,其实也就是标准。
为什么要有接口呢?因为java的类只能单继承(不能继承自多个类),因此就有了接口。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public interface Sport {
void run();
void jump();
}
class Athlete implements Sport {
public void run() {
System.out.println("长跑");
}
public void jump() {
System.out.println("跳高");
}
}
class Test {
public static void main(String[] args) {
Athlete zhangsan = new Athlete();
zhangsan.run();
zhangsan.jump();
}
}
使用interface定义接口,使用implements实现接口。
接口中所有的方法都是抽象的,并且都是public abstract,只是可以不显示写出,然而抽象类中却必须显示地将public abstract写出。在它的子类中如果要实现这些抽象方法,那么访问权限同样不能低于public。
在接口中声明方法时,不能使用native、static、final、synchronized、private、protected等修饰符。(也就是只有public abstract)
和public类一样,public接口也必须定义在与接口同名的文件中。
接口中可以有数据成员,这些成员默认都是public static final。也就是说接口中的数据成员的值不能被修改的,都是静态常量。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
interface Math {
double PI = 3.1415926;
// 相当于 public static final double PI = 3.1415926;
}
class Arithmetic implements Math {
double roundArea(double radius) {
return PI*radius*radius;
}
}
class Student {
public static void main(String[] args) {
Arithmetic a = new Arithmetic();
System.out.println(a.roundArea(3));
System.out.println(Math.PI);
System.out.println(Arithmetic.PI);// Arithmetic实现了Math
System.out.println(a.PI);
}
}
Java中不允许类的多继承,但允许接口的多继承。
接口可以多继承,而类不可以。
interface Sittable {
void sit();
}
interface Lie {
void lie();
}
interface Chair extends Sittable {
}
interface Sofa extends Sittable,Lie {// 接口的多继承
}
在java中一个类可以实现多个接口。
一个类在继承另外一个类的同时,可以实现多个接口。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
interface Sittable {
void sit();
}
interface Lie {
void lie();
}
interface HealthCare {
void massage();
}
class Chair implements Sittable {
public void sit(){
}
}
class Sofa extends Chair implements Sittable,Lie {// 一定要先继承,再实现。
public void lie() {
}
public void massage(){
}
}
实现接口也要实现接口中的全部方法,否则这个类也应该声明为抽象类。