【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )
文章目錄
- I . 抽象類總結(jié)
- II . 抽象類聲明
- III . 抽象類中的 ( 正常 / 抽象 ) 的 ( 成員 / 方法 )
- IV . 抽象類繼承
- V . 抽象方法的覆蓋
- VI . 抽象方法的實(shí)現(xiàn)
I . 抽象類總結(jié)
抽象類總結(jié) :
① 聲明 : 抽象類中使用 abstract 聲明 ;
② 成員 : 抽象類中既可以定義正常屬性和方法 , 又可以定義抽象的屬性和方法 ;
③ 繼承 : 抽象類可以繼承抽象類 , 抽象類也可以繼承正常類 , 正常類可以繼承抽象類 ;
④ 重寫 : 抽象類中可以使用抽象方法重寫正常方法 , 也可以進(jìn)行正常的方法重寫 ;
⑤ 特征 : 抽象方法只能定義在抽象類中 , 正常類中不能有抽象方法 ;
II . 抽象類聲明
1 . 抽象類簡(jiǎn)介 : 抽象類不能被實(shí)例化 , 在 class 關(guān)鍵字前使用 abstract 修飾 ;
① 抽象類默認(rèn) open 修飾 : 抽象類 , 默認(rèn)使用 open 關(guān)鍵字修飾 , 可以直接繼承 ;
② 抽象方法默認(rèn) open 修飾 : 抽象方法 , 默認(rèn)使用 open 關(guān)鍵字修飾 , 可以直接 override 重寫 ;
//使用 abstract 修飾抽象類 abstract class Student { }III . 抽象類中的 ( 正常 / 抽象 ) 的 ( 成員 / 方法 )
0 . 抽象類內(nèi)成員總結(jié) : 抽象類中可以定義正常的成員和方法 , 也可以定義抽象的成員和方法 ;
1 . 定義正常的屬性和方法 : 抽象類中可以定義正常的 成員屬性 和 成員方法 ;
① 正常成員屬性 : 該成員屬性可以是常量 , 也可以是變量 ;
② 正常成員方法 : 正常的方法 , 定義有方法體 ; 如果函數(shù)有方法體 , 不能聲明為抽象方法 ;
abstract class Student {//抽象類中定義普通常量val name: String = "Tom"//抽象類中定義普通變量var age: Int = 18//抽象類中定義正常方法fun say(){println("姓名 : ${name} , 年齡 : ${age}")} }3 . 定義抽象的屬性和方法 : 抽象類中可以定義抽象的 成員屬性 和 成員方法 ;
① 抽象屬性 : 被 abstract 修飾的 常量 var 或 變量 val 屬性 , 沒有初始化值 , 沒有 getter 和 setter 方法 ;
abstract class Student {//抽象類中定義抽象常量 , 沒有初始值 , 沒有 get set 方法abstract val name: String//抽象類中定義抽象變量 , 沒有初始值 , 沒有 get set 方法abstract var age: Int }② 抽象方法 : 使用 abstract 修飾的方法 , 沒有方法體 ; 如果函數(shù)有方法體 , 不能聲明為抽象方法 ; 如果類中有抽象函數(shù) , 該類必須聲明成抽象類 ;
abstract class Student {//抽象類中定義抽象方法 , 沒有方法體abstract fun say() }IV . 抽象類繼承
1 . 抽象類可以繼承抽象類 :
abstract class Father{ }//抽象類可以繼承抽象類 abstract class Son : Father() { }2 . 抽象類可以繼承正常類 : 該正常類必須使用 open 修飾 ;
open class Father{ }//抽象類可以繼承正常類 , 該正常類必須使用 open 修飾 abstract class Son : Father() { }V . 抽象方法的覆蓋
1 . 抽象方法覆蓋 : 父類的正常的方法 , 可以在子類中使用抽象方法進(jìn)行覆蓋 ;
① 注意父類方法的 open 修飾符 : 抽象類中的正常方法 , 如果想要在子類中設(shè)置可以被重寫 , 需要使用 open 修飾 ;
② 抽象函數(shù)與正常函數(shù)的繼承 : 其抽象函數(shù)默認(rèn)使用 open 修飾 , 可以直接重寫 , 正常函數(shù)需要使用 open 修飾才能被 override 重寫 ;
2 . 將正常函數(shù)覆蓋成抽象函數(shù) : 將 Father 類的 open 改成 abstract 也是可以的 , 覆蓋操作仍能成立 ;
//該類可以是正常類 , 也可以是抽象類 // 此處的示例是正常類 , 將 open 改成 abstract 也成立 open class Father{open fun action(){ println("Father")} }//抽象類可以繼承正常類 , 該正常類必須使用 open 修飾 abstract class Son : Father() {override abstract fun action() }3 . 將正常函數(shù)覆蓋成正常函數(shù) : 正常函數(shù)都可以被覆蓋成抽象函數(shù) , 那么正常函數(shù)的正常覆蓋 , 也可以進(jìn)行 ; 將 Father 類的 open 改成 abstract 也是可以的 , 覆蓋操作仍能成立 ;
//該類可以是正常類 , 也可以是抽象類 // 此處的示例是正常類 , 將 open 改成 abstract 也成立 open class Father{open fun action(){ println("Father")} }//抽象類可以繼承正常類 , 該正常類必須使用 open 修飾 abstract class Son : Father() {//也可以將其重寫成正常函數(shù)override fun action(){ println("Father") } }VI . 抽象方法的實(shí)現(xiàn)
抽象方法實(shí)現(xiàn) :
① 正常類子類 : 正常的類繼承抽象類必須實(shí)現(xiàn) abstract 抽象方法 ;
abstract class Father{abstract fun action() }//正常類繼承抽象類 , 必須實(shí)現(xiàn)抽象類中的抽象方法 class Son : Father() {override fun action() {println("正常類繼承抽象類 , 必須實(shí)現(xiàn)抽象類中的抽象方法")} }② 抽象類子類 : 如果抽象類繼承抽象類 , 可以不實(shí)現(xiàn)父累抽象方法 ;
abstract class Father{abstract fun action() }//抽象類繼承抽象類 , 可以不實(shí)現(xiàn)抽象方法 abstract class Son : Father() { }總結(jié)
以上是生活随笔為你收集整理的【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kotlin】Kotlin 类的继承
- 下一篇: 【Kotlin】接口 ( 声明 | 实现