1,接口
//接口寫法
interface ?onclickListener{
val ?name:String//屬性
fun ?click()//抽象方法
fun ?text(){//實(shí)現(xiàn)方法
println("click text")
}
}
interface ?onclickLongListener{
fun ? click()//抽象方法
fun ? text(){//實(shí)現(xiàn)方法
println("click long text")
}
}
//類實(shí)現(xiàn)接口
class ?Button(override val ?name: String) : onclickListener,onclickLongListener{//實(shí)現(xiàn)多接口用,隔開
override fun ?text() {
super<onclickListener>.text()//<>中聲明需要實(shí)現(xiàn)哪個(gè)接口的text方法
}
override fun ?click() {//如果只實(shí)現(xiàn)這個(gè)方法會(huì)報(bào)錯(cuò)
}
}
2,抽象類
//抽象類寫法
abstract class ? Personal{
abstract funtext()
}
//實(shí)現(xiàn)抽象類
class ? Man : Personal(){
override funtext() {
}
}
3,類的繼承
open class ?Button3(override val ?name: String) : onclickListener,onclickLongListener{
override fun ? text() {
super<onclickListener>.text()//<>中聲明需要實(shí)現(xiàn)哪個(gè)接口的text方法
}
override fun ? click() {}//如果只實(shí)現(xiàn)這個(gè)方法會(huì)報(bào)錯(cuò)
open fun ? show(){}
}
class ? Button4(override val ?name:String): Button3(name){//在kotlin中,一個(gè)類默認(rèn)是final,如果沒(méi)有open修飾Button3,Button4將無(wú)法繼承Button3
override funtext() {//可重寫B(tài)utton3方法
}
override funclick() {
}
override fun ? show(){}//在kotlin中,一個(gè)方法默認(rèn)是final,如果沒(méi)有open修飾show,Button4將無(wú)法重寫B(tài)utton3方法show
}
4,內(nèi)部類
class ? InterClass{
companion object{
fundismiss(){
}
}
valstr="李三"
//嵌套類
class ?InterText{
//? ? ? ? str.? //無(wú)法拿到InterClass中屬性,因?yàn)樵擃惡蚃ava不一樣,沒(méi)有隱式的引用InterClass對(duì)象
}
//內(nèi)部類
inner class inner{//inner關(guān)鍵字聲明內(nèi)部類
fun ?test(){
str.substring(0)? //已經(jīng)聲明為內(nèi)部類,可以拿到拿到InterClass中屬性
}
}
}
5,靜態(tài)類
object ? Dialog{
fun ? show(){
}
}
fun ? main(args: Array) {
Dialog.show()
}
6,伴生類
class ? Associated{
companion object A{//伴生類是隨著類的產(chǎn)生而產(chǎn)生的,相當(dāng)于java中static類,可以在伴生類中定義靜態(tài)方法或者成員屬性
fun ? dismiss(){
}
}
}
fun? AssociatedTest(args: Array) {
Associated.A.dismiss()
}
7,匿名內(nèi)部類
fun ? main3(args: Array) {
val ? person =object: Personal(){
override fun ?text(){
}
}
//使用java中的接口
vallistener = View.OnClickListener{
}
}
8,訪問(wèn)控制
//public默認(rèn)所有地方可見(jiàn)
//private類內(nèi)部及同文件中可見(jiàn)
//protected子類內(nèi)部可見(jiàn)
//internal模塊內(nèi)可見(jiàn),本App可見(jiàn),如果打成jar包作為依賴庫(kù),其它工程無(wú)法訪問(wèn)被internal修飾的類
private classp1
private classp2{
constructor(){
p1()
}
}