Java中的class A { ... }等于Kotlin中的open class A { ... }。 Java中的final class B { ... }等于Kotlin中的class B { ...}。 它与public无关。 在Kotlin中,所有没有访问修饰符的东西默认都是public,你可以在定义中明确地说public,但在Kotlin中这不是必须的。 所以,
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
}
class First{}
class Second:First(){} // Not allowed. Since 'First' is Final(as in Java) by default. Unless marked "open" it can't be inherited
不要与open和public混淆。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
}
//Final
class DemoA() {
protected fun Method() {
}
}
class DemoB() : DemoA {
Method() // can't access
}
//OPEN
open class DemoA() {
protected fun Method() {
}
}
class DemoB() : DemoA {
Method() // can access
}
//Public
class DemoA() {
fun Method() {
}
}
class DemoB() {
val a = DemoA()
a.Method() // can access
}
Java中的示例:
//FINAL
final class DemoA() {
protected void name() {
}
}
class DemoB() extends DemoA {
name(); // Can't access
}
//Open
class DemoA() {
protected void name() {
}
}
class DemoB() extends DemoA {
name(); // Can access
}
//Public
class DemoA() {
void name() {
}
}
class DemoB(){
DemoA a = new DemoA()
a.name(); // Can access
}
8条答案
按热度按时间roejwanj1#
open
关键字表示“开放扩展”-即可以创建open
类的 * 子类 *:类上的
open
注解与Java的final
相反:它允许其他人继承这个类。* 默认情况下 *,Kotlin中的所有类都是final
,对应于Effective Java,Item 17:设计和记录继承或禁止。你还需要明确你想要重写的方法,同样用
open
标记:public
关键字相当于visibility modifier,可以应用于类、函数、成员函数等。如果顶级类或函数是public
,则意味着它可以从其他文件使用,包括从其他模块使用。请注意,如果没有显式指定其他内容,则public
是默认值:如果不指定任何可见性修饰符,则缺省情况下使用
public
,这意味着您的声明在任何地方都是可见的pdtvr36n2#
Java中的
class A { ... }
等于Kotlin中的open class A { ... }
。Java中的
final class B { ... }
等于Kotlin中的class B { ...}
。它与
public
无关。在Kotlin中,所有没有访问修饰符的东西默认都是
public
,你可以在定义中明确地说public
,但在Kotlin中这不是必须的。所以,
以及
在Kotlin也一样。
56lgkhnf3#
我放在这里只是为了我的备忘录,也许对其他人有用:
有关详情:https://kotlinlang.org/docs/reference/classes.html
rkttyhzu4#
public:Kotlin中的public关键字类似于java,用于使类、方法、变量的可见性可从任何地方访问。
open:在Kotlin中,所有的类、函数和变量都默认为final,并且根据继承属性,我们不能继承final类、final函数和数据成员的属性,所以我们在类、函数或变量之前使用open关键字,使其可继承。
vsikbqxv5#
open和java中的Final是相反的,如果类不是'open',就不能被继承。
不要与open和public混淆。public是一个可见性修饰符
pprl5pva6#
默认情况下,所有
classes
、methods
和members
都是public
,但不是open
Kotlin中的关键字
open
表示“开放扩展”表示如果您希望任何类被任何子类覆盖为
inherited
,或者method
在子类中被覆盖,则必须标记为open
,否则将出现编译时错误注意:
abstract
类或方法默认为open
,您不需要显式添加。tpxzln5u7#
开放:
1.子类可以访问它,因为它们被它的父类继承。
1.在Kotlin中,您需要添加'open'关键字,这与java不同,java的所有类在默认情况下都是'open'的。
最终:
1.子类无法访问或继承。
1.在JAVA中,您需要添加'final'关键字,这与kotlin不同,kotlin的所有类在默认情况下都是'final'。
PUBLIC:任何类,无论是否继承,都可以访问它的数据或方法。
Kotlin中的示例:
Java中的示例:
lrpiutwd8#
总结答案(Kotlin)
*public只是封装,它影响类/方法的可见性。Public将使它们在任何地方都可见。
参考文献