接口
概念:
- 就是抽象类的一种特殊表现形式。当一个抽象类中,
- 所有的方法都是抽象方法时该类就可以用接口来表示。
- 接口不是类。
由于接口中没有成员函数,成员变量,构造函数,静态函数,静态变量(其变成了全局静态常量)。
因为其没有构造函数,所以其不能在创建实例化对象。当接口引用指向实现实例的时候,只能调用
接口不写访问权限修饰符的时候是默认的
interface 接口名{}
接口中的变量与函数的特殊含义
- 接口中的变量默认为公共静态常量
- 接口中的函数默认是公共抽象的函数
interface InterfaceA{// 这里的num已经不是成员变量的含义了,默认是public static final类型了int num;// 这里的方法默认是public abstract类型void show;
}
接口与类的关系:
类与类之间是单继承,类与接口之间是多实现的关系,接口与接口之间是多继承的关系
类与接口之间的关系用implements关键字实现
- 要么类实现接口中的方法
- 要么声明为abstract
单实现:
interface InterfaceA{void show();
}
class DemoA implements InterfaceA{@overridepublic void show(){System.out.println();}
abstract class DemoB implements InterfaceA{//若不想重写接口A中的方法,可以将该类定义为抽象类}
类与接口之间是多实现的关系
interface InterfaceA{void showA();
}
interface InterfaceA{void showB();}
class DemoA implements InterfaceA{@overridepublic void show(){System.out.println();}
class DemoB implements InterfaceA,InterfaceB{@Overridepublic void showA(){}@Overridepublic void showB(){}
}
接口与接口中的多继承:
interface InterfaceA{void showA();
}
interface InterfaceB{void showB();
}
interface InterfaceC extends InterfaceA,InterfaceB{void showC();
}
public class Sample implements InterfaceC{@Overridepublic void showA() {}@Overridepublic void showB() {}@Overridepublic void showC() {}
}
一个接口可以继承多个接口,而若该接口被一个类实现时要实现所有接口中的方法
注意:接口与接口之间没有实现关系,同时也没有抽象接口这个东西。
接口的特点:
- 接口中的变量都是全局静态常量
- 接口中的函数默认是公共抽象的函数
- 接口不可以创建对象
- 子类必须覆盖接口中所有的抽象方法,或生命为abstract
- 类与接口之间可以存在多实现关系
- 接口与接口之间有多继承关系,类与类之间时单继承关系
类与类之间的单继承的原因:
- 若可以多继承,若在父子类中有两个同名的方法,那么在类实例化调用时会产生调用的二义性,不知道去执行那一个方法。
接口与抽象类的区别:
相同:
- 都位于继承或实现的顶端
- 都不能实例对象
- 都包含 抽象方法,其子类必须覆盖这些方法
不同:
- 一个类只能继承一个父类,但可以实现多个接口
- 抽象类中可以存在一些 实现好的方法,有部分未实现的方法由子类来决定;接口中只能 包含抽象方法,子类必须完全实现
一个用接口实现的简单电脑连接实例
public class Electric {public static void main(String[] args) {Computer computer = new Computer();Mouse mouse = new Mouse();KeyWorld kw = new KeyWorld();Cammer cammer = new Cammer();computer.getDev1(mouse);computer.getDev2(kw);computer.getDev3(cammer);}}
interface USB{void getConnect();
}
class Computer{//获取USBpublic void getDev1(USB dev){System.out.println("电脑连接设备1");dev.getConnect();}public void getDev2(USB dev){System.out.println("电脑已连接设备2");dev.getConnect();}public void getDev3(USB dev){System.out.println("电脑已连接设备3");dev.getConnect();}}
class Mouse implements USB{@Overridepublic void getConnect() {System.out.println("鼠标已连接,开始运行");}
}
class KeyWorld implements USB{@Overridepublic void getConnect() {System.out.println("键盘已连接,开始运行");}
}
class Cammer implements USB{@Overridepublic void getConnect() {System.out.println("相机已连接,开始运行");}
}