接口
概述:
接口就是更深层次抽象类。接口中不能包含实现(静态常量除外)。
语法:
interface 接口名{接口成员;}
// eg: public interface Comparable{ int comparaTo(Object other); }
说明:
interface :关键字,用于定义接口
接口成员 :抽象方法(不需要使用abstract关键字)和静态常量
作用:
模板;子类的约束(也可以理解为规则)
**为了让类实现一个接口,通常需要一下两个步骤:
- 将类声明为实现给定的接口
- 对接口中的所有方法进行定义
接口的特性
- 接口不是类,尤其不能使用new运算符实例化一个接口:x = new Comparable(...);//错误的
- 然而,尽管不能构造接口对象,却能声明接口的变量:Comparable x;
- 接口变量必须引用实现了接口的类对象:x = new Employee();
- 同使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instance检查一个对象是否实现了某个特定的接口:if(anObject instanceof Comparable){...}
- 与类的继承关系一样,接口也可以被扩展。允许存在多态从具有较高通用性的接口到较高专用性的接口的链。如下例子:
//Moveable()接口 public interface Moveable{ void move(double x,double y); } //可以以Moveable为基础扩展一个叫做Powered的接口 public interface Powered extend Moveable{ double milesPerGallon(); } //虽然在接口中不能包含实例域或静态方法,但却可以包含常量。 public interface Powered extends Moveable{ double milesPweGallon(); oduble SPEED_LIMIT = 88; } //与接口中的方法都自动的被设置为public一样,接口中的域被自动设为:public static final
接口与抽象类
接口与抽象方法基本上效果是一样的,为什么还要引入接口的概念呢?
- 抽象类表示通用属性存在这样一个问题:每个类只能扩展于一个类。无法实现多个功能
- 接口可以提供多重继承,同时还能避免多重继承的复杂性和低效率性。