事情是這樣的,小德在kotlin中寫了一個「內部類」(這地方表達有問題,看完以後再來看一下就清楚了),而後在外部建立了這個內部類,可是建立的方式有點奇怪:bash
class ClassA {
init {
Log.v("testcon", "A ")
}
class ClassB{
init {
Log.v("testcon", "B ")
}
}
}
.....
var innerClass = OuterClass.InnerClass()
複製代碼
這個意思是..內部類的初始化不須要外部類?仍是kotlin優化過。在查看相關博客和本身寫了測試以後肯定了,不是kotlin優化了內部類,而是個人調用有問題->測試
Java的內部類有個特色,建立內部類須要先實例化外部類,看測試:優化
public class TestA {
public TestA() {
Log.v("testcon", "A ");
}
class TestB {
public TestB() {
Log.v("testcon", "B ");
}
}
}
複製代碼
建立TestB對象的時候要這麼寫:spa
TestA a = new TestA();
TestA.TestB b = a.new TestB();
複製代碼
看的很清楚,要實例化A才能實例化B,結果固然也是 「A B」這樣的了 這不固然了
3d
和Java一樣的思路,我建立了「內部類」,可是實例化內部類的時候並不須要實例化外部類,這是?不是很像靜態內部類麼?
實際上是和Java中相同的建立方法,咱們建立的叫嵌套類,在kotlin中要是想要建立和Java同樣的內部類,須要加上inner關鍵字,像這樣:code
class ClassA {
init {
Log.v("testcon", "A ")
}
inner class ClassB{
init {
Log.v("testcon", "B ")
}
}
}
複製代碼
能夠這麼理解,在Java中,嵌套類是指在一個類中又寫了一個類,其中非靜態的嵌套類咱們成爲內部類,固然咱們也有靜態內部類的說法,咱們知道其中的意思就行,不用很嚴格(要是大家考試的話最好仍是問下老師了)。
在靜態內部類中,內部類是不會有外部類的引用的,而非靜態內部類就須要持有外部類的引用了,因此在建立方式上有所不一樣。
在kotlin中有inner關鍵字就更清楚了,沒有inner的是嵌套類,沒有外部類的引用,能夠使用最開始哪一種方式建立,而有Inner關鍵字就說明是和Java中咱們熟悉的內部類同樣用法了。
說到底仍是kotlin沒仔細看,總是有Java的慣性思惟cdn
//做爲Android開發的初學者,若是我有錯誤的地方或者不足的話歡迎你們指正。但願與你們一同進步。
對象