• 接口定义与实现


    接口

    使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口声明和接口体

            接口声明

            interface 接口的名字

            接口体

            接口体中包含常量的声明(没有变量)和抽象方法两部分。接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定 都是public, 而且是static常量(允.许省略public、final 和static 修饰符),所有的抽象方法的访问权限一定都是public ( 允许省略public abstract修饰符)

    接口特点:

            1.接口没有构造方法

            2.接口不能实例化,但是可以将接口的引用指向其实现类实例

            3.一个接口不能实现另一个接口,但可以继承多个其他接口

            4.一个类必须实现接口抽象方法(implements),除非这个类也是抽象类.即当这个类是接口的实现类,这个实现类需要重写接口所有的抽象方法,否则这个实现类需要被定义为抽象类

            5.实现类可以实现多个接口

                   使用 implements关键字执行接口、多个接口使用逗号隔开

            6.接口中的变量都是静态常量(默认用public static final)必须显式初始化

            7.接口的所有方法都是抽象方法 (默认用public abstract修饰)

    接口是一种约定

            生活中,我们使用的两相电源插座,规定了:

                    两个接头间的额定电压

                    两个接头间的距离

                    接头的形状

            接口是一种约定

                    有些接口只有名称

            面向接口编程

                    程序设计时面向接口的约定而不考虑具体实现

    注意:

            接口中的方法在定义好了之后就不要轻易的去修改

                    因为修改接口中的方法,接口的实现类都要对修改的方法重新操作,非常麻烦

            一个类要想增加一个功能,只需要新建一个接口,然后让这个类实现这个新建的接口,就可以用这个接口定义的功能

    抽象类vs接口

            相同点

                    代表系统的抽象层

                    都不能被实例化

                    都能包含抽象方法

                            用于描述系统提供的服务,不必提供具体实现

            不同点

                    在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法

                            抽象类便于复用,接口便于代码维护

                    一个类只能继承一个直接的父类,但可以实现多个接口

            使用原则

                    接口做系统与外界交互的窗口

                            接口提供服务

                    接口本身一旦制定,就不允许随意修改

                    抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点

    案例:

     接口

    1. package cn.bdqn.demo03;
    2. public interface USB {
    3. //定义两个方法
    4. void electric();
    5. void data();
    6. }

    实现类 

    1. package cn.bdqn.demo03;
    2. public class USBFengShan implements USB {
    3. @Override
    4. public void electric() {
    5. System.out.println("风扇获取电能,风扇开始运作.....");
    6. }
    7. @Override
    8. public void data() {
    9. }
    10. public void qqq(){
    11. System.out.println("我是风扇中独有的方法。");
    12. }
    13. }
    1. package cn.bdqn.demo03;
    2. public class USBMouse implements USB {
    3. @Override
    4. public void electric() {
    5. System.out.println("鼠标获取电能,鼠标开始运作....");
    6. }
    7. @Override
    8. public void data() {
    9. System.out.println("获取数据传输能力,开始传输数据....");
    10. }
    11. public void test(){
    12. System.out.println("我是鼠标类中独有方法。");
    13. }
    14. }

    测试类 

    1. package cn.bdqn.demo03;
    2. public class Test {
    3. public static void main(String[] args) {
    4. // 接口不能实例化
    5. //USB usb = new USB();
    6. //直接通过接口的实现类构造方法创建对象
    7. USBFengShan usbf = new USBFengShan();
    8. usbf.electric();
    9. usbf.data();
    10. System.out.println("----------------");
    11. //通过向上转型创建实现类对象
    12. //向上转型: 父类的引用指向实现类的实例
    13. USB usb = new USBFengShan();
    14. usb.electric();
    15. usb = new USBMouse();
    16. usb.data();
    17. // usb = new USBFengShan();
    18. // usb.data();
    19. //接口的引用不能调用实现类中的独有方法,需要进行向下转型
    20. //usb.test();
    21. //在向下转型过程中,容易出现类型转换异常(ClassCastException)
    22. if(usb instanceof USBFengShan){
    23. USBFengShan usbs =(USBFengShan) usb;
    24. usbs.qqq();
    25. }else if(usb instanceof USBMouse){
    26. USBMouse usbm = (USBMouse) usb;
    27. usbm.test();
    28. }
    29. }
    30. }
  • 相关阅读:
    Maven官网下载安装详细教程
    大数据必学Java基础(一百零二):连接池的使用
    Docker相关命令
    重温OKHTTP源码
    react--电商商品列表使用
    win10环境下PCL安装和配置回顾(一)
    阅读JavaScript文档-闭包
    压缩与解压
    使用json、yaml、toml作为配置文件,你知道他们的区别吗
    陀螺仪与加速度计的姿态融合——互补滤波
  • 原文地址:https://blog.csdn.net/qq_51810428/article/details/126254167