В чем разница между "открытым" и "общественным" в Котлине?
Я новичок в Kotlin, и меня путают между open
и public
ключевыми словами. Может ли кто-нибудь сказать мне разницу между этими ключевыми словами?
Ответы
Ответ 1
Ключевое слово open
означает "open for extension":
open
аннотация в классе противоположна final
Java: она позволяет другим наследовать от этого класса. По умолчанию все классы в Котлине являются final
, что соответствует Эффективной Java, Пункт 17: Дизайн и документ для наследования, или же запретить его.
Также вам нужно быть явным о методах, которые вы хотите сделать переопределяемыми, также отмеченными с помощью open
:
open class Base {
open fun v() {}
fun nv() {}
}
Ключевое слово public
действует как модификатор видимости, который может применяться к классам, функциям и т.д. Обратите внимание, что public
является значением по умолчанию, если ничего не указано явно:
Если вы не указали какой-либо модификатор видимости, public
используется по умолчанию, что означает, что ваши объявления будут видны повсюду
Ответ 2
class A {... }
в Java равен open class A {... }
в Котлине.
final class B {... }
в Java равен class B {...}
в Котлине.
Это не связано с public
.
В Котлин, все без модификаторов доступа является public
по умолчанию. Вы можете явно public
в определении, но это не обязательно в Котлине.
Так,
public class A { ... }
а также
class A { ... }
в Котлине одинаковы.
Ответ 3
open противоположен финалу в java. Если класс не "открытый", он не может быть унаследован.
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
}