**一疲恢、Android 抽象類、抽象方法**
抽象方法:類的成員方法瓷胧,只有聲明显拳,沒有實現(xiàn),把實現(xiàn)交給子類搓萧。
抽象類:含有抽象方法的類杂数。
1.有抽象方法的類一定是抽象類遇八,但抽象類里可以沒有抽象方法(當(dāng)然也可以抽象方法+一般方法);
2.抽象類里可以構(gòu)造方法耍休,但當(dāng)其他類繼承(extends)時刃永,子類必須用super() 繼承父類的構(gòu)造方法;
3.抽象類一旦被繼承羊精,抽象方法在子類必須全部實現(xiàn)(沒有abstract修飾)斯够,但是當(dāng)子類也為抽象類時,父類的抽象方法可以不用實現(xiàn)或者部分實現(xiàn)喧锦;
4.抽象類不能被實例(new? 對象)读规,只能實例化實現(xiàn)了抽象方法的子類。
注意:
包含抽象方法的類稱為抽象類燃少,但并不意味著抽象類中只能有抽象方法束亏,它和普通類一樣,同樣可以擁有成員變量和普通的成員方法阵具。抽象類和普通類的主要有三點區(qū)別碍遍。
1.抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承阳液,子類便無法實現(xiàn)該方法)怕敬,缺省情況下默認(rèn)為public。
? ? ? 2.抽象類不能用來創(chuàng)建對象帘皿;
? ? ? 3.如果一個類繼承于一個抽象類东跪,則子類必須實現(xiàn)父類的抽象方法。如果子類沒有實現(xiàn)父類的抽象方法鹰溜,則必須將子類也定義為為abstract類虽填。
? ? ? ? 在其他方面,抽象類和普通的類并沒有區(qū)別曹动。
**二斋日、Android 中的接口**
1.接口類的所有方法都是抽象方法(和修飾詞abstract沒有一點關(guān)系),也就是完全抽象仁期;
2.接口內(nèi)不能構(gòu)造方法桑驱;
3.接口一旦被實現(xiàn)(implements)竭恬,接口內(nèi)的方法必須全部實現(xiàn)(沒有abstract修飾)跛蛋,但是當(dāng)實現(xiàn)類為抽象類時,接口內(nèi)的方法可以不實現(xiàn)或者部分實現(xiàn)痊硕;
4.接口不能被實例(new? 對象)赊级,只能實例化實現(xiàn)接口的類。
注意:接口中可以含有 變量和方法岔绸。但是要注意理逊,接口中的變量會被隱式地指定為public static final變量(并且只能是public static final變量橡伞,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關(guān)鍵字晋被,比如private兑徘、protected、static羡洛、 final等修飾會報編譯錯誤)挂脑,
2.接口中所有的方法不能有具體的實現(xiàn),從這里可以隱約看出接口和抽象類的區(qū)別欲侮,接口是一種極度抽象的類型崭闲,它比抽象類更加“抽象”,
3.一般情況下不在接口中定義變量威蕉。
**三刁俭、Kotlin中的抽象類、抽象方法**
抽象方法:使用abstract修飾符定義韧涨,只有方法簽名牍戚,沒有方法實現(xiàn)的方法。
抽象類:包含抽象成員(包屬性+方法)的類虑粥。
1.抽象類必須使用abstract修飾符來修飾翘魄,抽象類成員也必須使用abstract? ? 修飾符來修飾,抽象方法不能有方法體舀奶。
2.抽象類不能被實例化暑竟,無法調(diào)用抽象類的構(gòu)造器創(chuàng)建抽象類的實例。即使抽象類中不包含任何抽象成員育勺,這個抽象類也不能創(chuàng)建實例但荤。
3.抽象類可以包含屬性、方法涧至、構(gòu)造器腹躁、初始化塊、嵌套類5種成員南蓬。
4.抽象類中可以沒有抽象成員纺非。含有抽象成員的類只能被定義成抽象類。
注意:
1.abstract不能用于修飾局部變量赘方,Kotlin中沒有抽象變量的說法烧颖。
2.abstract也不能用于修飾構(gòu)造器,沒有抽象構(gòu)造器窄陡,抽象類中定義的構(gòu)造器只能是普通構(gòu)造器炕淮。
3.private和abstract不能同時修飾方法。
4.有abstract修飾的成員跳夭,無須使用open修飾涂圆,當(dāng)使用abstract修飾類時们镜,表明這個類需要被繼承;當(dāng)使用abstract修飾方法润歉、屬性時模狭,表明這個方法、屬性必須由子類提供實現(xiàn)踩衩。
**四胞皱、Kotlin中的接口**
1.Kotlin 接口與 Java 8 類似,使用 interface 關(guān)鍵字定義接口九妈,**允許方法有默認(rèn)實現(xiàn)**:
2.接口中的屬性只能是抽象的反砌,不允許初始化值,接口不會保存屬性值萌朱,實現(xiàn)接口時宴树,必須重寫屬性:
今天的分享結(jié)束了,再見~