首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现一个接口和添加一个新方法有区别吗?

实现一个接口和添加一个新方法是有区别的。

实现一个接口是指一个类实现了某个接口中定义的所有方法,这意味着该类必须提供接口中定义的所有方法的具体实现。接口是一种规范,定义了一组方法的签名,但没有具体的实现。通过实现接口,类可以表明自己具备了接口所定义的行为。

添加一个新方法是指在一个类中新增一个方法,该方法可以是类的自有方法,不需要遵循接口的定义。通过添加新方法,可以为类增加新的功能或行为。

区别在于:

  1. 实现接口是为了符合某个接口的规范,必须提供接口中定义的所有方法的具体实现;而添加新方法是为了增加类的功能,不需要遵循接口的定义。
  2. 实现接口是一种约束,表示类具备了接口所定义的行为;而添加新方法是类的自有方法,不受接口的限制。
  3. 实现接口可以使类具备多态性,可以通过接口类型引用实现了该接口的类的对象;而添加新方法不涉及多态性。

总结: 实现接口是为了符合接口的规范,必须提供接口中定义的所有方法的具体实现;而添加新方法是为了增加类的功能,不需要遵循接口的定义。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 依赖倒置就是每一个实现都要抽一个接口出来吗?

    “ A: 我觉得我们现在的抽象有点多,infra 层里面每一个类都抽取了接口,这些被调用的类多半只有一个实现,我们是不是做的太细了?...B: 从依赖倒置的角度讲,domain 层和 service 层并不应该直接调用 infra 层的实现,因此我们确实是需要每一个实现都抽一个接口出来。...A: 那依赖倒置就是每一个实现都要抽一个接口出来吗? B: 这个... ” 看来小伙伴 A 不经意间触碰到了 S.O.L.I.D. 的深水区......以开发的角度理解:高层不要直接调用低层,而是调用抽取出来的接口。 那这么说,依赖倒置就是每一个实现都要抽一个接口出来吗? 为了解释这个问题,我们尝试来提出一个新的问题:为啥要依赖倒置?...现在,我们可以再回到最开始的问题本身: 依赖倒置就是每一个实现都要抽一个接口出来吗?

    47420

    一个类实现多个接口的同名方法会报错吗?

    接口圈真乱 之所以会提出如标题中的问题, 是因为在看ArrayList时,发现接口实现好像有点混乱 如上图所示,其实是有两个问题 AbstractList 实现了List接口, 然后ArrayList...这样有问题吗Collection接口中有个size()方法, List接口中也有一个size()方法....如果有某个类同时实现Collection和List接口, 会不会报错 实践出真知 首先,我们能正常使用ArrayList 说明上面两个问题应该是不成问题的.对于问题1....,要不要去重写方法都不会报错但是通用来说, 抽象类的作用就是,要有一个通用的实现,所以一般来说,还是实现方法比较好, 然后再抛一个抽象的具体实现, 如下所示: /** * @author lixiang...**/ public interface GreetCopy { /** * 加油的接口定义 */ String cheer(); } 和最开始我们定义的Greet

    1.2K20

    你有一个 U 盘制作多系统安装盘的需求吗,YUMI 帮你秒实现!

    通常我们一个 U 盘只能制作成一个系统安装盘,比如制作好一个 Windows 10 安装盘,日后想要用到 Linux、WinPE 等安装盘时,只能重新制作一遍,非常浪费时间。...而且现在 U 盘容量都很大,如果只放一个系统,同样就会白白浪费 U 盘剩余的空间。 今天,我们就给大家推荐一个可以让你的 U 盘制作成多系统安装盘的神器 YUMI。...YUMI 几乎支持全系列的 Windows 和 Linux 操作系统。比如 Windows 10、Windows 7、WinPE、Windows To Go 以及 Linux 的各种发行版。...共分为 Legacy 和 UEFI 两个版本,请根据自己 BIOS 实际引导情况选择下载。...如果你想要制作一个集 Windows 10、WinPE 和 Linux 系统于一身、方便用于维护和装机的多合一系统安装盘,那么操作如此简单的 YUMI 值得你拥有!

    4.1K40

    面试官:防抖和节流的区别是啥?实现一个防抖和节流函数

    一、为什么要防抖和节流? 我们在开发程序的过程中,可能会频繁的点击某一个事件,或者短时间内请求多次接口,对事件处理函数的频率没有进行限制,从而导致浏览器卡顿或者卡死,导致用户体验非常差。...防抖和节流函数就是为了限制函数的执行次数和 短时间内不必要多次执行函数,从而提高项目性能。...代码: function debounce (fn, await) { let timer = null // 定义一个定时器的变量 return function () { // 用闭包返回一个函数...代码: function throttle (fn, await) { let timer = null // 定义一个定时器的变量 return function() { // 用闭包返回一个函数...= null; // 清空定时器 }, await) } } } 使用场景: 触底加载更多/滚动加载更多事件 防止重复点击事件 当然也有很多种版本,小编只是实现了个简单的版本

    64140

    n个进程访问一个临界资源,则设置的互斥信号量_多线程同步和互斥有几种实现方法

    【进程进入临界区的调度原则】 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。 任何时候,处于临界区内的进程不可多于一个。...ThreadFunc2, NULL, 0, NULL); HANDLE TH[2] = { hTH1, hTH2 }; //等待所有内核对象,TRUE等待所有信号量有效再往下执行,FALSE当有其中一个信号量有效时有向下运行...用来通知线程有一些事件已发生,从而启动后继续任务的开始。 事件对象也可以通过通知操作方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。...由于互斥量在实现时既容易又有效,这使得互斥量在实现用户空间线程包时非常有 用。 为协调共同对一个共享资源的单独访问而设计的。...; 信号量:为控制一个具有有限数量用户资源而设计; 事件:用来通知线程有一些事件即将发生,从而启动后继任何的开始。

    61510

    “面试不败计划”: java语言基础面试题(一)

    接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的. 灵活性....定义抽象方法,子类虽然有不同的实现,但是定义时一致的 7、接口和抽象类的区别 比较 抽象类 接口 默认方法 抽象类可以有默认的方法实现 java 8之前,接口中不存在方法的实现....构造器 抽象类中可以有构造器, 接口中不能 和正常类区别 抽象类不能被实例化 接口则是完全不同的类型 访问修饰符 抽象方法可以有public,protected和default等修饰 接口默认是public...,不能使用其他修饰符 多继承 一个子类只能存在一个父类 一个子类可以存在多个接口 添加新方法 想抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码 如果往接口中添加新方法,则子类中需要实现该方法...任何修改都会创建一个新的对象,如 String、Integer及其它包装类。 10、静态变量和实例变量的区别?

    51240

    Java面试-面向对象

    抽象类和接口有什么区别?...抽象类 接口 抽象类可以提供完整的默认代码和/或仅提供必须覆盖的详细信息 一个接口根本不能提供任何代码,只能提供签名 对于抽象类,一个类只能扩展一个抽象类 一个类可以实现多个接口 抽象类可以具有非抽象方法...接口的所有方法都是抽象的 抽象类可以具有实例变量 接口不能有实例变量 抽象类可以具有任何可见性:公共,私有,受保护 接口可见性必须是公共的(或无) 如果我们向抽象类添加新方法,则可以选择提供默认实现,...因此所有现有代码都可能正常工作 如果我们向接口添加新方法,则必须跟踪该接口的所有实现并为新方法定义实现 抽象类可以包含构造函数 接口不能包含构造函数 抽象类很快 接口很慢,因为它需要额外的间接才能在实际的类中找到对应的方法...Java中继承有哪些不同类型? Java支持四种继承类型: 单继承:在单继承中,一个类继承另一个属性,即将只有一个父类和一个子类。

    71520

    2022 最新 JDK8 新特性 面试题

    2022 最新 JDK8 新特性 面试题 1.阐述 Java 7 和 Java 8 的区别 实话说,两者有很多不同。如果你能列出最重要的,应该就足够了。你应该解释 Java 8 中的新功能。...默认方法,支持将新功能添加到类库中的接口,并确保与基于这些接口的旧版本的代码的二进制兼 容性。 重复注解,支持在同一声明或类型上多次应用同一注解类型。...Lambda表达式是作为代码块创造的,因为它没有名称,可以带有或不带有参数和结果。 6.Lambda表达式和功能接口之间有什么联系? 当我们使用Lambda表达式时,这意味着我们正在使用功能接口。...15.功能接口和SAM接口之间有什么区别吗? 不,功能接口和SAM接口之间没有区别。 SAM接口或单一抽象方法接口是Java SE 8 API中定义的一种功 能接口。...默认方法与抽象方法不同之处在于抽象 方法必须要求实现,但是默认方法则没有这个要求,就是接口可以有实现方法,而且不需要实现类去实 现其方法。

    11610

    抽象类和接口选择以及Lambda表达式场景下的区别简单探讨

    抽象类和接口是面试中常问的基础题。 主要有以下区别: 参数 抽象类 接口 默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。...它需要提供接口中所有声明的方法的实现 构造器 抽象类可以有构造器 接口不能有构造器 与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型 访问修饰符...抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public。...多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口 速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。...添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。

    45430

    如何设计优秀的API(三)

    使用抽象类的好处(The Advantages of Abstract Classes) 人们喜欢使用抽象类最主要的原因是它的进化能力 —— 它可以增加一个有缺省实现的新方法而不影响已有的客户和实现方...结果,新版本的应该很有用的“places”被创建以后,我们将不敢为它添加新方法。...可以给客户请求做日志吗?可以, EditorFactory是实现这种功能的好地方。 可以提供一些同步访问和死锁等等保护吗?在EditorFactory里实现这些功能是最佳选择。...在最早的CloneableEditorSupport的例子里,可以增加一个新方法(protected类型的方法),该方法在CloneableEditorSupport里有一个缺省实现,但是增加一个新方法通常是很危险的...每个上述这样的服务提供者都要显式指定它想实现哪个SPI接口,这比直接在CloneableEditorSupport里添加新方法要显得清晰得多。

    62930

    150道MySQL高频面试题,学完吊打面试官--InnoDB索引与MyISAM索引实现的区别+一个表中如果没有创建索引,那么会创建B+树吗

    前言 本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。...InnoDB索引与MyISAM索引实现的区别 本文知识点梳理: 一、InnoDB索引实现 聚集索引: InnoDB采用聚集索引(Clustered Index)的方式存储数据。...MyISAM的主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。 内存管理: MyISAM只将索引载入内存,数据缓存依赖于操作系统。...一个表中如果没有创建索引,那么会创建B+树吗 在数据库中,索引是一种关键的数据结构,用于加速数据查找和访问。其中,B+树是最常见且最重要的索引数据结构之一。...对于MySQL的InnoDB存储引擎来说,它使用B+树来实现索引结构。 主键索引(聚集索引): 当在表中指定了主键时,InnoDB会自动为主键创建一个聚集索引,该索引的叶子节点包含整个数据行。

    9510

    java8定义函数式接口

    多种组合当涉及到Lambda表达式的组合场景时,你可以使用Java 8中的函数式接口和Lambda表达式来实现更复杂的功能。...接口默认方法和抽象方法在Java 8中接口支持默认方法的实现,使得接口的修改更加灵活,而不会破坏现有的实现。...Java 8中的接口默认方法和抽象类的方法有以下区别: 多继承: 接口可以实现多继承,一个类可以实现多个接口,包括具有默认方法的接口。而Java中的类只能单继承一个类,但可以实现多个接口。...设计目的: 接口默认方法的引入是为了向现有接口添加新方法时提供一种向后兼容的方式,而抽象类主要用于代码重用和封装共同行为。...而接口默认方法提供了一种在接口中添加新方法的方式,而不会破坏现有实现,使得接口更加灵活。

    28000

    基于 el-form 封装一个依赖 json 动态渲染的表单控件 定义接口,统一规范封装各种表单子控件定义属性定义内部model实现多行多列和布局调整实现扩展实现数据联动实现组件联动

    使用插槽 使用插槽比较简单和灵活,可以在表单控件外部完全控制,适合临时的情况,插槽里可以有多个组件。 ?...定义接口,统一规范 表单子控件有一个相同的需求,都需要实现属性和 v-model 数据交换,因为 element 把 value 给封装成了v-model,所以无法直接绑定组件的属性,必须建立一个内部变量来绑定...定义一个 v-model 和 my-change // 自定义 ref /** * 自定义的ref,实现属性和内部变量的数据转换 * @param { reactive } props 组件的属性...实现多行多列和布局调整 采用 el-col 实现,通过控制 span 来实现多列,所以理论上最多支持24列,当然这个要看屏幕宽度了。...我们使用 component 和动态组件来实现表单子控件的加载。

    1.7K30

    保持 Go 模块兼容

    结果可能是一个新的函数,它具有上下文、网络、地址和控制功能。相反,包的作者添加了 ListenConfig 结构体,因为有一天可能需要更多的选项。...直接添加到接口是一个破坏性的变化,但是,我们如何在公开的接口上支持新方法呢? 基本思想是用新方法定义一个新接口,然后在使用旧接口的地方,动态检查所提供的类型是旧类型还是新类型。...当您遇到要向现有接口添加方法的情况时,您可以遵循此策略。首先用新方法创建一个新接口,或者用新方法标识现有接口。接下来,确定需要支持它的相关函数,为第二个接口键入check,并添加使用它的代码。...与接口不同,使用具体类型可以在将来添加方法而不会破坏用户。该属性允许您的模块在将来更容易扩展。 提示:如果您确实需要使用一个接口,但不想让用户实现它,您可以添加一个未导出的方法。...当您确实需要添加新特性时,请记住以下规则:添加、不更改、不删除。记住异常–接口、函数参数和返回值不能以向后兼容的方式添加。

    1.2K30
    领券