首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >接口可以包含有实现的方法吗?

接口可以包含有实现的方法吗?
EN

Stack Overflow用户
提问于 2022-09-10 13:19:27
回答 2查看 57关注 0票数 0

Oracle说:“抽象类类似于接口。不能实例化它们,它们可能包含有或没有实现声明的方法组合。但是,使用抽象类,您可以声明非静态和最终的字段,并定义公共、受保护和私有的具体方法.”

我认为接口只能包含抽象方法,而抽象方法在定义上没有实现。那么,为什么Java文档说抽象类类似于接口,因为它们可能包含有或没有实现声明的方法的组合?

链接到文档

EN

回答 2

Stack Overflow用户

发布于 2022-09-10 13:42:44

因为

我认为接口只能包含抽象方法和抽象方法。

是不正确的。或者说,它在Java1.7之前是正确的,并且从那时起一直是不正确的,因为java8引入了方法机制。换句话说,在这一点上,大约15年来一直是不正确的。

这是合法的java,现在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface Map<K, V> {
  public V get(Object key);
  public boolean containsKey(Object key);

  public default V getOrDefault(Object key, V defaultValue) {
    return containsKey(key) ? get(key) : defaultValue;
  }
}

default方法进一步模糊了抽象类和接口之间的界限。任何实现都可以覆盖它们,如果需要的话。关于他们的几条规则:

  • 这些没有等级制度。如果您定义了一个类,该类以多个接口结束,而这会导致为同一方法继承多个这样的“默认实现”,则implements编译器将拒绝编译该,唯一的出路是显式定义该方法。如果你愿意的话,你可以用InterfaceName.super.methodName(params);来指代你想要的任何激励。这“解决”了这个“钻石问题”。换句话说,将接口类型放在implements子句中的顺序仍然无关紧要。
  • 接口仍然不能声明字段(或者更确切地说,它们变成常量-隐式public static final)。
  • 它们的目的是在版本更新中添加实用程序方法,这些方法构建在现有方法之上,例如getOrDefault (其中的实际存在),并且从java 8开始就这样做了。通常,它们并不是真正的“意思”来扩展接口所代表的内容,因为您不能挥舞魔杖,让实现者从任何地方扩展实现。在很少的情况下,您可以完全基于不涉及任何字段的默认行为来扩展接口所代表的内容。在这种情况下,您也可以使用default机制。
  • default关键字是必需的。
  • 同样的更新还包括了将static方法插入其中的能力,这很不错。
  • 现在还可以编写private方法。此功能只允许您为default方法编写助手方法。
票数 3
EN

Stack Overflow用户

发布于 2022-09-10 13:42:55

默认方法是将实现放在接口中的一种方法。

但是要注意:在Java中添加了默认方法,以解决添加对兰巴斯的支持而又不破坏Java著名的向后兼容性的问题。

通常,添加默认方法应该是最后的选择,而不是您的第一个选择。

通常最好将接口视为(严格地说是 合同 ),这是一个单独的类来实现特定行为的承诺。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73675218

复制
相关文章
Java8:接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】
面试同学看起来对这问题有点怀疑人生,最后还是斩钉截铁的告诉面试官:接口里面只能写抽象方法,不能写实现方法。
小黑同学
2022/05/10
1.5K0
Java8:接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】
Java8:接口里面可以写实现方法吗?【可以】接口可以多继承吗?【可以】
面试同学看起来对这问题有点怀疑人生,心里肯定估摸着,我不会在给他埋了什么坑吧。然后他还是仔细再想了一下,最后还是斩钉截铁的告诉面试官:接口里面只能写抽象方法,不能写实现方法。
小黑同学
2020/11/24
2.8K0
Java8:接口里面可以写实现方法吗?【可以】接口可以多继承吗?【可以】
JVM的方法区可以实现垃圾回收吗?
方法区和堆一样,都是线程共享的内存区域,被用于存储已被虚拟机加载的类信息、即时编译后的代码、静态变量和常量等数据。 根据Java虚拟机规范的规定,方法区无法满足内存分配需求时,也会抛出OutOfMemoryError异常,虽然规范规定虚拟机可以不实现垃圾收集,因为和堆的垃圾回收效率相比,方法区的回收效率实在太低,但是此部分内存区域也是可以被回收的。 方法区的垃圾回收主要有两种,分别是对废弃常量的回收和对无用类的回收。 当一个常量对象不再任何地方被引用的时候,则被标记为废弃常量,这个常量可以被回收。 方法
JavaQ
2018/04/08
1.4K0
JVM的方法区可以实现垃圾回收吗?
main方法可以重载吗?可以被其他方法调用吗?可以继承吗?
不过自 JDK1.5 引入动态参数后,String[]数组也可以使用String... args来实现。
4xx.me
2022/06/10
1.6K0
java深拷贝的实现方式_接口可以创建对象吗
Cloneable接口与Serializable接口都是定义接口而没有任何的方法。Cloneable可以实现对象的克隆复制,Serializable主要是对象序列化的接口定义。很多时候我们涉及到对象的复制,我们不可能都去使用setter去实现,这样编写代码的效率太低。JDK提供的Cloneable接口正是为了解决对象复制的问题而存在。Cloneable结合Serializable接口可以实现JVM对象的深度复制。
全栈程序员站长
2022/11/04
1.5K0
oligo包可以处理agilent芯片吗
结果,不仅没有找到ID号,而且还看到了oligo包,很有趣,第一次看到oligo包可以处理agilent芯片的,不知道亲爱的读者你们觉得这个靠谱吗?
生信技能树
2019/12/31
8970
oligo包可以处理agilent芯片吗
Java中抽象类和接口中可以有构造方法吗?
Java中抽象类和接口中可以有构造方法吗? -----------------------------------------------------------------------------
黑泽君
2018/10/11
2.1K0
面试:main 方法可以继承吗?
昨天,微信群里一位网友,在群里发了自己面试的过程。其中一个面试,他在群里 PUA 其他网友。这道面试题就是:Java 中的 main 方法可以继承吗?
Java旅途
2022/03/04
7070
idea查看接口方法的实现方法_jsp接口实现类
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170590.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
3.4K0
idea查看接口方法的实现方法_jsp接口实现类
父类静态方法可以重写吗?
比较坑的一个问题是,子类能否重写父类的静态方法? 答案当然是可以的。但是重写之后会发生什么,是否调用子类静态方法会执行子类的逻辑,这才是坑所在的地方。
PhoenixZheng
2018/08/07
1.5K0
接口隔离原则:接口里的方法,你都用得到吗?
接口不就是一个语法吗?把需要的方法都放到接口里面,接口不就出来了吗? 这种对于接口的理解,还只停留在语法层面。设计出来的只能算作是有了个接口,但想要设计出好接口,还要有在设计维度上的思考。
JavaEdge
2023/01/11
3970
接口隔离原则:接口里的方法,你都用得到吗?
一个类实现多个接口的同名方法会报错吗?
大家好,我是小刀,今天和大家讨论一下接口实现的两个问题,众所周知,接口是设计模式的基石,所以了解接口的一些实现对理解设计模式,源码都大有裨益!
微笑的小小刀
2020/06/28
1.2K0
Transactional 可以作用于接口、接口方法、类以及类方法上
@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。   虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。   默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。
用户7999227
2021/10/07
1.9K0
阿里二面:main 方法可以继承吗?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/10
3950
前端html源码可以不暴露接口吗?为什么?
html属于的前端编程中一项,接口是必须要暴露的,起码基于现在的技术框架是无法避免的,因为只要是有关html的代码只需要在浏览器里面右键点击查看源代码所有的相关的html代码都会原封不动的展示出来,所以前端页面的很多样式特效只要有一家有新的变化出来,紧接着很快就会被抄袭拷贝了,样式和风格太容易拿来使用了,所以想在加密只能在数据接口上做做文章,现在web安全已经成为一个非常热点的问题,因为随着网页应用的普及化网页安全将会越来被重视。
程序员互动联盟
2019/03/07
3.2K0
前端html源码可以不暴露接口吗?为什么?
Objective-C 静态方法可以重写吗
首先来看一段代码 #import <Foundation/Foundation.h> @interface Person : NSObject + (void)pringName:(NSString *)name; @end #import "Person.h" @interface Person() @end @implementation Person + (void)pringName:(NSString *)name { NSLog(@"Person-%@",name); }
赵哥窟
2018/09/13
1.3K0
loadrunner性能测试步骤_loadrunner可以做接口测试吗
LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。 1.1.软件资源下载 网盘链接:https://pan.baidu.com/s/1Km9_OsVI857PpVvHMNx82A 提取码:gtis 1.2.组件介绍 首先解释一下三者的区别和联系: VuGen(即Virtual User Generator)是最基本的部分,中文解释是“虚拟用户生成器”,通过模拟用户对程序进行的操作来产生相关代码,录制完成后存储在系统中,而这些代码也是后续进行各项测试的基础。 Controller:控制器用于组织,驱动,管理和监控负载测试。可以添加用户,查看运行时的信息吞吐量,位于测试的中间环节。 Analysis:分析是帮助您查看、分析和比较负载测试的结果。形成专业性的报告,用于汇报和展示数据,位于测试的收尾部分。
全栈程序员站长
2022/11/07
1.3K0
loadrunner性能测试步骤_loadrunner可以做接口测试吗
Java 中的接口还可以这样用,你知道吗?
Java 程序员都知道要面向接口编程,那 Java 中的接口除了定义接口方法之外还能怎么用你知道吗?今天阿粉就来带大家看一下 Java 中的接口还可以有哪些用法。
Java极客技术
2022/12/04
6500
Java 中的接口还可以这样用,你知道吗?
企业架构方法论可以简化吗?
在与很多读者朋友的沟通中,经常会遇到对方法论的各种思考和提问,这都是为了推动方法论的进步,今天跟大家聊下问的最多的一个,也许笔者自己说的也是误解,大家共同讨论吧。
用户6900693
2021/03/11
6210
企业架构方法论可以简化吗?
点击加载更多

相似问题

接口可以部分实现方法吗?

26

接口可以使用静态方法实现吗?

11

属性可以实现接口吗?

12

子类可以实现接口吗?

21

静态方法可以在.NET中实现接口吗?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文