从零开始学java(接口)
接口
前面讲到了类的继承与多态,其实接口也很类似与类的继承与多态,不同于类,接口是可以多个实现的,如果把类与类继承比喻为父与子,那么接口就是实现类的一种能力。比如,一个人具有吃饭的能力,我们写一吃饭的接口,这个接口只要是人这个类派生出的子类都可以去实现它。所以一个子类只能继承一个父类,但是一个类可以实现多个接口。来看代码。
/** * 定义一个Eat接口 * @author GMZ * 定义接口的关键字为 interface */ public interface Eat { public void eat(); }
/** * 定义一个Run接口 * @author GMZ * 定义接口的关键字为 interface */ public interface Run { public void run(); }
public abstract class Parent implements Eat,Run { protected String name; public Parent(String name) { this.name = name; } }
/** * 写一个实现类 继承Parent * @author GMZ * 因为Parent类implements接口所以,实现类必须实现接口的方法 */ public class Lily extends Parent { public Lily(String name) { super(name); } @Override public void eat() { System.out.println(super.name+"-----------在吃饭!"); } @Override public void run() { System.out.println(super.name+"-----------在疯跑!"); } }
/** * 写一个做事的代理类 * @author GMZ * */ public class DoProxy { public static void run(Parent parent){ parent.run(); } public static void eat(Parent parent){ parent.eat(); } }
public static void main(String[] args) { DoProxy.run(new Lily("lily")); DoProxy.eat(new Lily("lily")); }
接口有几个特点:
1.接口不可以被实例化
2.实现类必须实现接口的所有方法,否则必须将其定义为抽象类(如上图代码)。
3.实现类可以实现多个接口
4.接口中的变量都是静态常量
5.接口中的方法都是全局抽象方法,接口中没有构造方法
接口的总结:
接口表示一种约定,接口表示一种能力,接口体现了约定和实现相分离的原则。
抽象类利于代码的复用,接口利于代码的维护
通过面向接口编程:可以降低代码之间的耦合(类的继承是一种强耦合),提高代码的可扩展性和维护性