iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

學習 Android Kotlin 隨筆系列 第 19

[ Day 19 ] Kotlin 基本功(四)程式語法練習

  • 分享至 

  • xImage
  •  

前言

上篇介紹了基本的 class 的用法,這篇將會進階的介紹到 class 之間的關係

繼承(inheritance)

  • 繼承父 class 的 function

    在物件導向上面,能夠去強化物件之間的關係。透過繼承能夠確認出,每個 class 的父子關係,為何會談到父子關係呢?主要程式上的概念是希望把 class 需要共用的部分額外提出來,不要重複去寫這些 function,子的部分就是再去各自改寫就好。

    以下面的 code 為例,今天一家銀行最基本的功用就是存錢以及提錢,而各家銀行的存款利率都不同,所以這部分就另外寫,如下:

    • BankAccount
    open class BankAccount(val accountNumber: String, val accountName: String) {
        var balance : Double = 0.0
    
        fun depositeMoney(amount: Double): Boolean {
            if(amount > 0) {
                balance += amount
                return true
            } else {
                return false
            }
        }
    
        fun withdrawMoney(amount: Double): Boolean {
            if(amount > balance) {
                return false
            } else {
                balance -= amount
                return true
            }
        }
    
    }
    
    • saveAccount
    class SavingsAccount (accountNumber: String, accountName: String, val interestRate: Double) :
            BankAccount(accountNumber, accountName) {
    
        fun depositInterest() {
            val interest = balance * interestRate / 100
            this.depositeMoney(interest);
        }
    }
    

    將這樣的 class 關係先訂定好,其他家銀行或許有其他的方案,或許有其他要做的 function,但基本的存款提款都不會變。 SavingsAccount 繼承了 BankAccount,並且另外實作了一個 depositInterest function,應用如下:

    fun main(args: Array<String>) {
        // Create a Savings Account with 6% interest rate
        val savingsAccount = SavingsAccount("64524627", "Rajeev Kumar Singh", 6.0)
    
        savingsAccount.depositeMoney(1000.0)
    
        savingsAccount.depositInterest()
    
        println("Current Balance = ${savingsAccount.balance}")
    }
    

    這樣 savingsAccount 既可以使用屬於自己的 function depositInterest ,也可以使用到他的"父親"的 function。

  • Overriding

    意思就是說去名稱是造著父的 function,但是內容卻重新改寫, code ,如下,MathsTeacher 改寫了他父親的 teach

    open class Teacher {
        // Must use "open" modifier to allow child classes to override it
        open fun teach() {
            println("Teaching...")
        }
    }
    
    class MathsTeacher : Teacher() {
        // Must use "override" modifier to override a base class function
        override fun teach() {
            println("Teaching Maths...")
        }
    }
    

    在 main 裡面就能夠這樣的使用:

    fun main(args: Array<String>) {
        val teacher = Teacher()
        val mathsTeacher = MathsTeacher()
    
        teacher.teach()  // Teaching...
        mathsTeacher.teach() // Teaching Maths..
    }
    

上一篇
[ Day 18 ] Kotlin 基本功(三)程式語法練習
下一篇
[ Day 20 ] 據說猴子都懂 Git !(一)基本介紹
系列文
學習 Android Kotlin 隨筆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言