概念:
- 就是抽象类的一种特殊表现形式。当一个抽象类中,
- 所有的方法都是抽象方法时该类就可以用接口来表示。
- 接口不是类。
由于接口中没有成员函数,成员变量,构造函数,静态函数,静态变量(其变成了全局静态常量)。
因为其没有构造函数,所以其不能在创建实例化对象。当接口引用指向实现实例的时候,只能调用
接口不写访问权限修饰符的时候是默认的
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("相机已连接,开始运行"); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)