Java接口
概述
有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
另一方面,有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都支持USB连接。
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须能…”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系。
接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都要遵守。
语法要求
类的关键字为class,接口关键字则为interface。
接口中一般有:常量、抽象方法。在java8后,接口中可以有静态方法和默认方法,Java9以后,可以有private的实例方法。但是,接口中不能具有实例字段(属性)以及构造器。
接口的特点:
- 接口中的所有成员变量都默认是由public static final修饰的。
- 接口中的所有抽象方法都默认是由public abstract修饰的。
- 继承只能单继承,但接口可以多实现
interface ICpu
{
String name = "Intel";
void cpu ();
}
上述代码和下面是一样的
interface ICpu
{
public static String name = "Intel";
public abstract void cpu ();
}
Java8后,接口可以有静态方法:
interface ICpu
{
String name = "Intel";
void cpu ();
public static String getName ()
{
return name;
}
}
接口实现使用关键字implements,实现多个接口,将多个接口之间用,隔开
class Manager extends Employee implements Cloneable,Comparable
{
// ...
}
instanceof
可使用instanceof来检查一个对象是否实现了某个特定接口:
if (anObject instanceof Comparable){...}
接口扩展
与类的继承一样,也可以扩展接口。允许有多条接口链,从通用性较高的接口扩展到专用性较高的接口。
public interface Moveable{
void move (double x, double y);
}
public interface Powered extends Movable
{
Double SPEED_LIMIT = 95;
double milesPerGallon();
}