首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 16+中,为什么密封到单个子类的类不能访问该子类中的方法,有什么原因吗?

在Java 16+中,为什么密封到单个子类的类不能访问该子类中的方法,有什么原因吗?
EN

Stack Overflow用户
提问于 2021-03-06 04:57:29
回答 1查看 136关注 0票数 0

作为一个具体的例子

代码语言:javascript
复制
sealed interface A permits B {
    default void a() {
        this.b();
    }
}
    
non-sealed interface B extends A {
    void b();
}

我知道这不能编译,但从语言的角度来看,我不明白编译器/编译器实现者有什么理由不允许它。

EN

回答 1

Stack Overflow用户

发布于 2021-04-02 02:10:19

正如@sepp2k评论的那样,有一个显而易见的答案:b()不是A的成员。

你的直觉告诉你,"sum类型有点像联合类型“,”既然b()在联合'A=B or nothing‘中的所有已知类型的交集中,那么我们应该能够将b()视为A的成员“。除了“这不是它的工作方式”之外,想想这种“鸭子类型”对于B的变化,A的许可列表的变化等是多么脆弱,还有什么好的原因呢?

如果A想要表达一个约束,即它的所有子类都有一个方法b(),那么有一种长期存在的方法可以做到:然后A可以声明一个抽象的b()。在语言中为“只有一个子类的密封类”的情况引入这种复杂性将是非常愚蠢的,因为已经有了一种简单而安全的方法来做到这一点。“但我将不得不在A中再输入一行代码”不是希望有这种魔力的好理由。

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

https://stackoverflow.com/questions/66499539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档