接口学习笔记

本文探讨了接口在Java中的作用及其与抽象类的区别,并详细介绍了Java 8中引入的接口新特性,包括默认方法和静态方法。此外,还讨论了函数式接口的概念及其与lambda表达式的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口: 只有抽象方法的抽象类 我们可以用接口替代  

为什么这么做?

很简单 , 理由如下 :

    1/多继承

    2/设计和实现分离

    3/更自然的使用多态

    4/更容易实现框架搭建

    5/更容易实现更换修改等操作    .....     等等优势


接口是一种约定

针对接口编程  :程序设计时追求针对接口的约定而不考虑具体的实现       spring框架的极致体现

                        关心类具有的能力,而不去关心实现细节

接口不能实例化  而接口的实现可以   

===================================================

接口中所有的属性都是public   static   final 修饰的

常量可以是基本数据类,也可以是引用数据类型

 注意 : 

            常量的命名规范全部字母大写

            接口的修饰符可能是包    访问级别的,所以public常量有可能访问不到

            推荐使用枚举保存一组先关数据的值    jdk5以上

接口成员  ----方法

1/抽象方法 

2/静态方法

3/默认方法               后两种属于java8新增的

接口可以继承接口      不能继承静态方法


========================================================

一个类可以实现多个接口   接口可以作为数据类型用来声明变量

实现接口的抽象类可以重写部分接口中的抽象方法

----------------------------------------------------------------------------

java8提出的新语法 

一  接口的静态方法

1/可以在接口中声明静态方法,实现一些处理逻辑

2/该方法不会被实现类和子接口继承

这样我们在使用接口时可以直接打点调用接口里的静态方法 ,而也只可以以这种方式进行调用其方法

二   接口的默认方法

默认方法对所有实现改接口的类都提供了默认的实现

可以有多个默认方法

不能是静态的

可以重写默认方法

     为什么有默认方法?      之前是通过接口中声明方法   在接口的实现中实现方法    但如果在一个已经运行的程序中有可能出现这样一种情况

对于一个接口可能要求新增一个方法,而这个接口的实现类则必须都去实现这个方法,做出相应的修改

基于这样的考虑  ,java8 的设计者提出了这样一种方法....

例如 --->default  viod   show () { }    这样接口的实现类就都拥有了这样一种行为



默认方法和类的普通方法相比较:

相同点:  都提供了实现  都可以用this表示当前运行的实例

不同点:  类的普通方法可以访问实例到变量 而默认方法不可以,他只能访问接口中的其他成员

--->对于不同点所提出的的默认方法只能访问接口的其他成员 ,而不可以访问实例的变量是因为此处在逻辑上是不可以的 

很简单 ,现有的接口,后有的实现类    ....   重写方法除外


=============================================================

 此处做三块而记录   1/解决冲突  2/标记接口   3/ 函数式接口

1/ 冲突是什么???  在java8 中由于有了默认方法 ,有利有弊,其产生的弊端之一便是冲突

    如: A类有一个方法 show()   B接口有一个默认方法show()    某实现类继承A同时实现了B接口  ,此时这个实现类的实例

在调用show方法时,会出现冲突 ,接口默认方法与父类方法的冲突

        --->结论   :   父类与接口方法冲突时 ,父类优先

            默认方法不能和Object中的方法相同不能同时出现,为什么呢 ?  因为Object是所有类的父类,接口里写了没有调用的可能

当多个接口的默认方法名相同,参数不同是,按照重写规则 ,接口中的默认方法可以重载

当多个接口有完全相同的默认方法时, 子类必须重写该方法

-------------------------------------------------------------------------------

标记接口?  没有任何成员的接口 ,自身没有任何成员,也没有从父接口继承成员

有啥用?用于标记一个类在特定的环境中有特定的意义

在jdk中 

        1./ java.lang.Cloneable    标记接口   表示这个类是可以克隆的

        2./java.io.Serializable    标记接口   表示这个类可以被序列化

        3./java.rmi.Remote     标记接口   和远程调用方法有关 ...?

java 5 引入注解的语法可以实现相同的标记功能   而且性能相对更好  ,此处未做相关资料整理

========================================================

函数式接口: 只有一个抽象方法的接口   , 告别匿名内部类     ( ) -->   

@FunctionalInterface       标记函数式接口注解   jdk8 引入      此注解可选

主要目的 : 用来和lambda表达式关联

  





一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值