Tag: OOP与

Kotlin的访问修饰符是否和Java中的一样?

Kotlin有3个访问关键字: public , private和protected 。 他们的意思是和Java一样的东西,还是有区别? 另外, internal是否与package private相同? 我一直在阅读关于Kotlin的“模块”,我不确定这是不是“包”的另一个词。

Kotlin基本的继承解决方案

如何使用初始值为owner和balance创建新的SavingAccount open class BankAccount(val owner: String = "Long John Silver", private var balance: Double = 0.00) { constructor (amount: Double) : this() { this.balance = amount } fun deposit(amount: Double){ this.balance += amount } fun withdraw(amount: Double){ this.balance -= amount } fun getBalance(): Double{ return this.balance } } 和孩子班 class SavingAccount(val increasedBy: Double = 0.05): […]

Kotlin – 是否可以在类的init块之前初始化伴侣对象?

是否可以在Kotlin类的init块之前初始化companion object ? 如果是这样,怎么样? 如果没有,是否有办法完成同样的事情。 我有以下情况, class A(val iname: String) { init { foo.add(this) } companion object B { @JvmField val STATIC = A("hi") @JvmField val foo = mutableListOf<A>() } fun printAllStatics() { for (a in foo) { print(a.iname) } } } 并调用printAllStatics会导致一个空指针异常。

遗产在Kotlin

试图找出Kotlin最后的日子,阅读了文档,并找到一个例子。 在文章的底部: interface A { fun foo() { print("A") } fun bar() } interface B { fun foo() { print("B") } fun bar() { print("bar") } } class C : A { override fun bar() { print("bar") } } class D : A, B { override fun foo() { super<A>.foo() super<B>.foo() } } 现在,如果我们从A中派生出一个具体的类C,我们显然必须重写bar()并提供一个实现。 如果我们从A和B派生出D, […]

了解Kotlin的特质

在Kotlin中,我们有可能创建一个“可能需要在呼叫方扩展类的特征”,比如 class Bar {} trait T1 : Bar {} class Foo : Bar, T1, T2, T3 {} class Wrong : T1, T2 //error: Wrong should extend Bar 我无法想象任何可以应用这种结构的流程。 谁能告诉我为什么我们需要它?