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

Sag*_*age 29 public keyword kotlin

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

s1m*_*nw1 35

open关键字的意思是"对扩展开放":

open注释与Java相反:它允许其他人继承此类.通过默认情况下,在科特林所有的类都是,这相当于有效的Java,项目17:继承设计文件,否则禁止它.finalfinal

您还需要明确要覆盖的方法,并标记为open:

open class Base {
    open fun v() {}
    fun nv() {}
}
Run Code Online (Sandbox Code Playgroud)

public关键字作为一个可见性修饰符,可以在类的应用,功能等.注意,public是默认的,如果没有其他明确规定:

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

  • 好的。现在我懂了。“可见”是指“可访问”。而`public`使它可以从任何地方访问。`open` 允许继承一个类。谢谢! (2认同)

Nae*_*mul 7

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

与无关public

在Kotlin中,没有访问修饰符的所有内容都是public默认设置。您可以public在定义中明确指出,但在Kotlin中没有必要。

所以,

public class A { ... }
Run Code Online (Sandbox Code Playgroud)

class A { ... }
Run Code Online (Sandbox Code Playgroud)

在科特林都一样。

  • 我认为它就像 Kotlin 中的分号。它们是为爪哇人而存在的。 (3认同)
  • 如果是这样,那么将类设为“public”到底有什么用?如果使用`open`,则可以继承该类。使类“公开”的主要目的是什么? (2认同)

and*_*v71 7

我放在这里只是为了我的备忘录,也许对其他人有用:

kotlin 中的open class 意味着一个类可以被继承,因为默认情况下它们不是:

 class Car{....}
 class Supercar:Car{....} : // give an error

 open Car2{....}
 class Supercar:Car2{....} : // ok
Run Code Online (Sandbox Code Playgroud)

Java中的公共类是关于类的可见性(与继承无关:除非Java中的类是final的,否则默认情况下可以继承)。在 kotlin 中,所有类默认都是公开的。

kotlin 中的open方法意味着该方法可以被覆盖,因为默认情况下它们不是。相反,在 Java 中,所有方法都可以默认覆盖

开放类的方法不能像往常一样默认覆盖(类是否开放无关紧要),必须声明它们可以被覆盖:

 open class Car{
    fun steering{...}
 }
 class Supercar:Car{
    override fun steering {...}  // give an error
 } 

 open class Car2{
    open fun steering{...}
 }
 class Supercar:Car2{
    override fun steering {...}  // ok
 }
Run Code Online (Sandbox Code Playgroud)

更多详情:https : //kotlinlang.org/docs/reference/classes.html


小智 7

public:Kotlin 中的 public 关键字与 java 类似,用于使类、方法、变量可见,以便从任何地方访问。

open:在Kotlin中,所有类、函数和变量默认都是final的,并且通过继承属性,我们不能继承final类、final函数和数据成员的属性。因此,我们在类、函数或变量之前使用 open 关键字来使其可继承。