栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号