栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

隐藏接口的默认方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

隐藏接口的默认方法

似乎您对

default
方法的存在感到困惑。因此,让我们暂时忘记这
IFace1.printHello()
是一种
default
方法。因此,有一个明显的情况:
Test
实现两个接口
IFace1
和
IFace2
,它们碰巧具有一个具有相同名称和签名的方法。

Test
实现该方法,因此对两个接口都实现了该方法。
default
方法的新功能不会改变此逻辑。而且,语言设计者要注意,添加
default
方法不会影响现有代码的行为,因此,如果您的类实现了该方法,则方法的存在将
default
变得无关紧要。

但是,如果编写的代码知道方法的存在

default
,则可以调用它,如果它是由直接超级接口声明或继承的,即可以在代码
IFace1.super.printHello()
中调用的
default
方法
IFace1
。

这些规则与超类的规则没有太大不同。如果更改接口以使接口

IFace2
扩展
IFace1
并仍声明
printHello()
为
abstract
方法,则此
abstract
方法会覆盖该
default
方法,并且您将无法再
IFace1.super.printHello()
从内部进行调用
Test
。

如前所述,这些规则与普通实例方法没有太大不同。如果

Test
声明了一个方法
printHello()
,那是 唯一的
,你可以通过一个参考调用方法
Test
的实例,其声明的类型,无论是
Test
,
IFace1
还是
IFace2
。只有
Test
其自身的实现方法才可以执行
super
调用。


当涉及到接口的可能的多重继承时,主要区别就发挥了作用。如果你的类

Test
没有 不
实施该方法
printHello()
,它取决于两个接口的继承关系,会发生什么

  • 如果
    IFace2
    extends
    IFace1
    ,它是抽象方法,则重新声明该
    default
    方法,因此会发生编译器错误,因为
    Test
    必须实现该
    abstract
    方法
  • 如果
    IFace2
    不扩展
    IFace1
    ,则有两个具有相同名称和签名的可继承方法,因此
    Test
    将不会继承该
    default
    方法,并且会发生编译器错误,因为
    Test
    必须实现该
    abstract
    方法
  • 如果
    IFace1
    extends
    IFace2
    ,
    Test
    将继承该
    default
    方法。如果
    Test
    未实现
    IFace2
    ,它也会继承它,但这应该令人惊讶……


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号