1、在java中,接口是一种标准、规范。
2、格式:[修饰符] interface 接口名{}
3、特点:
① 没有构造方法,不能实例化。
② 接口只能继承接口,不能继承类,且接口支持多继承。
一个接口允许有多个父接口。
Eg: interface IWalkable extends 接口1,接口2{}
③ 接口里的全是抽象方法,默认修饰符是public abstract。
④ 接口里的字段全是全局静态常量,默认修饰符是public static final。
⑤ 接口里的是静态的内部类,默认修饰符是public static。
4、接口和抽象类:
1) 相同点:
(a) 都位于继承的顶端,用于被其他实现或继承。
(b) 都不能实例化。
(c) 都可以定义抽象方法,其子类都必须覆写这些抽象方法。
2) 区别:
(a) 接口没有构造方法,抽象类有构造方法。
(b) 抽象类可包含普通方法和抽象方法,接口只能包含抽象方法;
(c) 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口(接口弥补了Java的单继承)。
(d) 变量:接口里默认是public static final,抽象类是默认包权限。
(e) 方法:接口里默认是public abstract,抽象类默认是默认包访问权限。
(f) 内部类:接口里默认是public static,抽象类默认是默认包访问权限。
二者的选用:优先选用接口,尽量少用抽象类。若需要定义子类的行为,又要为子类提供共性功能时选用抽象类。
5、实现类的语法
public class 实现类 extends 父类 implements 接口1,接口2
1) 实现类实现接口之后,必须覆盖掉接口中所有的抽象方法,否则,该实现类只能作为抽象类。
2) 实现类和接口之间的关系--->实现关系,是一种特殊的继承关系。
3) 实现类覆盖接口中的方法,一般的称之为 实现。
6、代码:
class Test3
{
public static void main(String[] args)
{
Computer pc = new Computer();
pc.connectPC();
System.out.println(pc.WIDTH);
pc.connectNet();
}
}
interface USB
{
public static final int WIDTH = 15;
public static final int HEIGHT = 5; //全局静态变量
public abstract void connectPC(); //抽象方法
}
interface Net
{
int COUNT = 8; //接口中可以简写: public static final int COUNT = 8;
void connectNet(); //public abstract void connectNet();
}
//implements: 实现接口
class Computer implements USB,Net
{
public void connectPC(){
System.out.println("链接成功!!");
}
public void connectNet(){
System.out.println("成功上网!!");
}
}
7、总结:
1)一个类可以实现多个接口;
2)Java中继承只能单继承,实现类可以同时实现多个接口;
3)Java中接口支持多继承。
4)在实际开发中,既可以用抽象类又可以用接口的话,就使用接口,因为接口可以多实现,可以解耦(降低耦合度),避免了单继承的局限。