首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能声明一个嵌套类,它是一个密封类的子类?

为什么我不能声明一个嵌套类,它是一个密封类的子类?
EN

Stack Overflow用户
提问于 2020-08-02 01:20:13
回答 1查看 1.2K关注 0票数 1

Kotlin文档指出:

密封类可以有子类,但是必须在与密封类本身相同的文件中声明所有子类。(在Kotlin 1.1之前,规则更加严格:类必须嵌套在密封类的声明中)。

诚然,这是一个必要但不充分的条件,但它确实意味着(由于没有任何相反的情况),我可以在同一个文件中的任何地方声明一个密封类的子类。

考虑到以下代码编译:

代码语言:javascript
复制
//class Jungle {
    sealed class Animal
    class Tiger : Animal()
//}

为什么以下内容不编译:

代码语言:javascript
复制
class Jungle {
    sealed class Animal
    class Tiger : Animal()
}

第二个片段给出了Intellij插件版本1.3.72-release-IJ2020.1-5的以下错误

代码语言:javascript
复制
Error:(3, 20) Kotlin: Cannot access '<init>': it is private in 'Animal'
Error:(3, 20) Kotlin: This type is sealed, so it can be inherited by only its own nested classes or objects

实际上,这里的第二个错误消息似乎与文档直接矛盾。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 06:42:09

它有一个公开发行,它还注意到了误导性诊断信息。但似乎围绕着它的谈话平息了下来。

而且,这个4年前的密封类继承方案留下了将嵌套的密封类作为一个公开问题在同一级别上进行子类分类的问题。

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

https://stackoverflow.com/questions/63211499

复制
相关文章

相似问题

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