Java的接口是一个完全抽象的类,它允许确定方法名、参数列表、返回值类型,但不提供具体实现,使用接口,可以让代码更加规范,更易于阅读。接口的实现类则必须实现接口中定义的所有方法。
创建一个接口,需要将class关键字用interface代替,并且需要在interface关键字前添加public,使接口可被外部包访问,接口中也可以有域,但域需要是static和final的。接口的实现类则和普通类等价,可以被扩展,以下是一个例子
public interface CanSwim {
int age=1;
void swim();
}
public class Human implements CanSwim{
public void swim() {}
}
public class Woman extends Human{
public String toString() {
return "Woman";
}
}
一个类也可以组合一个具体类和多个接口,称作多重继承,接口名需置于implements后,并用逗号隔开
public interface CanFight {
void fight();
}
public interface CanSwim {
int age=1;
void swim();
}
public class Human implements CanSwim{
public void swim() {}
}
public class Animal {
public void fight(){}
}
public class Woman extends Animal implements CanFight,CanSwim{
CanSwim canswim;
public String toString() {
return "Woman";
}
Woman(CanSwim canswim){
this.canswim=canswim;
}
public void swim() {
this.canswim.swim();
}
}
public class Test {
public static void main(String[] args) {
Woman woman= new Woman(new Human());
woman.swim();
}
}
Woman类组合了具体类Animal和接口CanFight、CanSwim,并且由于Animal类中已经有了fight()方法,Woman类中就不必再提供fight()方法。同时,Woman的swim使用了delegation模式,实现了内部的灵活和复用。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,而接口是Java诸多设计模式的基石,合理运用接口可以完美地解决很多问题。