一糙捺、包
1.包的定義
我們都知道Java中,包是用關(guān)鍵字package定義笙隙,同樣的在Kotlin中洪灯,也是用package關(guān)鍵字定義
例如:
/*
*
*Demo類的全名是 com.hello.kotlin.Demo,這里跟java中的書寫沒有任何區(qū)別
*
*/
package com.hello.kotlin
class Demo{
}
Kotlin和Java中包定義的區(qū)別
#######Java:包名的和路徑必須保持一致,如上面Demo類所在包名為:com.hello.kotlin.Demo,那么項目工程中與之對應(yīng)的包所在路徑也必須是:
com
---hello
--------kotlin
這點我們應(yīng)該是沒有任何質(zhì)疑的竟痰,但在Kotlin中卻并沒有這樣的限制
Kotlin:允許包名和路徑不同签钩,也就是說Demo類的報名為:com.hello.kotlin.Demo,項目中與之所對應(yīng)的文件路徑可以不必保持一致的:
下面的路徑在Kotlin中將被允許
cn
---kotlin
---------hello
2.默認導(dǎo)包
我們知道Java中導(dǎo)包都需要我們手動或使用編譯器進行配置了自動導(dǎo)包才能完成的一個操作坏快,但Kotlin中則不同铅檩,有很多包會默認導(dǎo)入到每一個kotlin文件中,比如下面這些:
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.* (自 1.1 起)
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
當(dāng)然莽鸿,根據(jù)所在的不同平臺昧旨,也會存在其平臺特有的包被默認導(dǎo)入到每一個kotlin文件中拾给,如:
JVM
java.lang.*
kotlin.jvm.*
JavaScript
kotlin.js.*
3.導(dǎo)入
如果我們使用的類,不在默認導(dǎo)入中時兔沃,就需要我們進行手動導(dǎo)包了蒋得,當(dāng)然Kotlin同樣也支持使用編譯器實現(xiàn)快捷導(dǎo)包,在AS上的使用和java并沒任何區(qū)別
導(dǎo)入指定類,例如我們需要導(dǎo)入上述Demo類的包
import com.hello.kotlin.Demo
如果我們需要使用到com.hello.kotlin包中其他的類乒疏,最好是希望把該包所有類都導(dǎo)入進來供我們使用额衙,那么像下面這樣就可以實現(xiàn)了
import com.hello.kotlin.*//導(dǎo)入com.hello.kotlin下面所有的類,子包等
需要注意的是與Java有點區(qū)別怕吴,Kotlin中沒有import static的語法入偷,所有的類,字段等都是用import語法導(dǎo)入
二械哟、修飾符
1.類,成員修飾符
除了與java共有的public殿雪、private暇咆、protected、final的外丙曙,kotlin還有其特有的修飾符爸业,open、internal
public——能見到類聲明的任何客戶端都可見其 public 成員亏镰。
private——意味著只在這個類內(nèi)部(包含其所有成員)可見
protected—— 和 private一樣 + 在子類中可見
internal——能見到類聲明的 本模塊內(nèi) 的任何客戶端都可見其 internal 成員
open——只有被open修飾的類才可以被繼承扯旷,同樣的也只有被open修飾的方法才可以被重寫
final——被final修飾的類,不可被繼承索抓,final修飾的方法不可被重寫钧忽。默認修飾符
有個和java較大區(qū)別需要注意 :對于Java中外部類不能訪問內(nèi)部類的 private 成員,Kotlin 中是不允許外部類不能訪問內(nèi)部類 private 成員<br />
如果你覆蓋一個 protected 成員并且沒有顯式指定其可見性逼肯,該成員還會是 protected 可見性
open class Outer {
private val a = 1protected open val b = 2internal val c = 3val d = 4 // 默認 publicprotected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a 不可見// b耸黑、c、d 可見// Nested 和 e 可見override val b = 5 // “b”為 protected
}
class Unrelated(o: Outer) {
// o.a篮幢、o.b 不可見// o.c 和 o.d 可見(相同模塊)// Outer.Nested 不可見大刊,Nested::e 也不可見
}
2.構(gòu)造函數(shù)
要指定一個類的的主構(gòu)造函數(shù)的可見性,使用以下語法(注意你需要添加一個 顯式 constructor 關(guān)鍵字):
class C private constructor(a: Int) { …… }
這里的構(gòu)造函數(shù)是私有的三椿。默認情況下缺菌,所有構(gòu)造函數(shù)都是 public,這實際上 等于類可見的地方它就可見(即 一個 internal 類的構(gòu)造函數(shù)只能 在相同模塊內(nèi)可見).
模塊
可見性修飾符 internal 意味著該成員只在相同模塊內(nèi)可見搜锰。更具體地說伴郁, 一個模塊是編譯在一起的一套 Kotlin 文件:
一個 IntelliJ IDEA 模塊;
一個 Maven 或者 Gradle 項目纽乱;
一次 <kotlinc> Ant 任務(wù)執(zhí)行所編譯的一套文件