可见性修饰符
Java中有public、private、protected和default,而Kotlin中也有4种,public、private、protected和internal。
private 修饰符在两种语言中的作用是一样的,都表示只对当前类内部可见。
public修饰符的作用虽然也是一致的,表示对所有的类都可见,但是在Kotlin中public修饰符是默认项,而在Java中default才是默认项。
protected关键字在Java中表示对当前类、子类和同一包路径下的类可见,在Kotlin中则表示只对当前类和子类可见。Kotlin抛弃了同一包路径下的类可见,引入了一种新的可见性概念。
internal修饰符是只对同一模块中的类可见,不暴露给外部。
数据类和单例类
数据类
当在一个类前面声明了data关键字时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成、从而大大减少了开发的工作量。
data class Cellphone(val brand: String,val price: Double)
fun main(){
val cellphone1 = Cellphone("Samsung", 1299.99)
val cellphone2 = Cellphone("Samsung", 1299.99)
println(cellphone1)
println("cellphone1 equals cellphone2 " + (cellphone1 == cellphone2))
}
//很明显我们可以得到这样的结果
Cellphone(brand = Samsung, price = 1299.99)
cellphone1 equals cellphone2 true
//如果没有data,结果为
Cellphone@16b98e56
cellphone1 equals cellphone2 false
单例类
单例模式,最常用、最基础的设计模式之一,它可以用来避免重复的对象。
object Singleton{
fun singletonTest(){
println("singlentonTest is called.")
}
}
Singleton.singleTonTest()
这种写法看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个SingleTon类的实例,并且保证全局只存在一个Singleton实例。