接口
概念:
- 就是抽象类的一种特殊表现形式。当一个抽象类中,
- 所有的方法都是抽象方法时该类就可以用接口来表示。
- 接口不是类。
由于接口中没有成员函数,成员变量,构造函数,静态函数,静态变量(其变成了全局静态常量)。
因为其没有构造函数,所以其不能在创建实例化对象。当接口引用指向实现实例的时候,只能调用
接口不写访问权限修饰符的时候是默认的
interface 接口名{
}
接口中的变量与函数的特殊含义
- 接口中的变量默认为公共静态常量
- 接口中的函数默认是公共抽象的函数
interface InterfaceA{
// 这里的num已经不是成员变量的含义了,默认是public static final类型了
int num;
// 这里的方法默认是public abstract类型
void show;
}
接口与类的关系:
类与类之间是单继承,类与接口之间是多实现的关系,接口与接口之间是多继承的关系
类与接口之间的关系用implements关键字实现
- 要么类实现接口中的方法
- 要么声明为abstract
单实现:
interface InterfaceA{
void show();
}
class DemoA implements InterfaceA{
@override
public void show(){
System.out.println();
}
abstract class DemoB implements InterfaceA{
//若不想重写接口A中的方法,可以将该类定义为抽象类
}
类与接口之间是多实现的关系
interface InterfaceA{
void showA();
}
interface InterfaceA{
void showB();
}
class DemoA implements InterfaceA{
@override
public void show(){
System.out.println();
}
class DemoB implements InterfaceA,InterfaceB{
@Override
public void showA(){}
@Override
public void showB(){}
}
接口与接口中的多继承:
interface InterfaceA{
void showA();
}
interface InterfaceB{
void showB();
}
interface InterfaceC extends InterfaceA,InterfaceB{
void showC();
}
public class Sample implements InterfaceC{
@Override
public void showA() {
}
@Override
public void showB() {
}
@Override
public 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{
//获取USB
public 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{
@Override
public void getConnect() {
System.out.println("鼠标已连接,开始运行");
}
}
class KeyWorld implements USB{
@Override
public void getConnect() {
System.out.println("键盘已连接,开始运行");
}
}
class Cammer implements USB{
@Override
public void getConnect() {
System.out.println("相机已连接,开始运行");
}
}