Kotlin中'open'和'public'有什么区别?

问题描述 投票:22回答:3

我是Kotlin的新手,我在openpublic关键词之间感到困惑。谁能告诉我这些关键词之间的区别?

kotlin keyword public
3个回答
29
投票

open关键字的意思是“开放扩展”:

类的open注释与Java的final相反:它允许其他人继承此类。默认情况下,Kotlin中的所有类都是final,它对应于Effective Java,第17项:继承的设计和文档,或者禁止它。

您还需要明确表示要进行覆盖的方法,并使用open标记:

open class Base {
    open fun v() {}
    fun nv() {}
}

public关键字充当可见性修饰符,可应用于类,函数等。请注意,如果没有明确指定其他内容,则public是默认值:

如果您未指定任何可见性修饰符,则默认使用public,这意味着您的声明将随处可见


6
投票

Java中的class A { ... }等于Kotlin中的open class A { ... }。 Java中的final class B { ... }等于Kotlin中的class B { ...}

它与public无关。

在Kotlin中,默认情况下,没有访问修饰符的所有内容都是public。您可以在定义中明确说明public,但在Kotlin中没有必要。

所以,

public class A { ... }

class A { ... }

在科特林是一样的。


2
投票

open与java中的Final相反。如果该类不是“打开”,则不能继承。

class First{}
class Second:First(){}  // Not allowed. Since 'First' is private by default.

不要对公开和公开感到困惑。 public是一个可见性修饰符

class Third{}  // By default this is public
private class Fourth{}
class Fifth{
    val third = Third() // No issues
    val fourth = Fourth() // Can't access because Fourth is private
}
© www.soinside.com 2019 - 2024. All rights reserved.