What is the difference between 'open' and

2019-02-21 10:07发布

I am new to Kotlin and I am confused between open and public keywords. Could anyone please tell me the difference between those keywords?

2条回答
Juvenile、少年°
2楼-- · 2019-02-21 11:02

class A { ... } in Java is equal to open class A { ... } in Kotlin.
final class B { ... } in Java is equal to class B { ...} in Kotlin.

It is not related with public.

In Kotlin, everything without access modifiers is public by default. You can explicitly say public in the definition, but it is not necessary in Kotlin.

So,

public class A { ... }

and

class A { ... }

are the same in Kotlin.

查看更多
看我几分像从前
3楼-- · 2019-02-21 11:11

The open keyword means “open for extension“:

The open annotation on a class is the opposite of Java's final: it allows others to inherit from this class. By default, all classes in Kotlin are final, which corresponds to Effective Java, Item 17: Design and document for inheritance or else prohibit it.

You also need to be explicit about methods you want to make overridable, also marked with open:

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

The public keyword acts as a visibility modifier that can be applied on classes, functions etc. Note that public is the default if nothing else is specified explicitly:

If you do not specify any visibility modifier, public is used by default, which means that your declarations will be visible everywhere

查看更多
登录 后发表回答