【Kotlin/Android】abstract(抽象クラス)の使い方!メリットと違い

【Kotlin/Android】abstract(抽象クラス)の使い方!メリットと違い

この記事からわかること

  • Android Studio/Kotlinabstract(抽象クラス)とは?
  • メリット使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

abstract(抽象クラス)とは?

公式リファレンス:abstract-classes

Kotlinではabstractclassの前に付与することで抽象クラスとして定義することができます。抽象クラスとはインスタンス化できないクラスで他のクラスによって継承されることを前提としたクラスです。「抽象的」の言葉通りぼんやりとした具体的でないクラスになります。

抽象クラスには抽象メンバー(具体的な実装を持たないメンバー)具象メンバー(具体的な実装を持つメンバー)の両方を定義することが可能です。

abstractの使い所

interfaceとの違い

同じような役割を持ったinterfaceとの違いは以下の通りになります。

特徴 abstract interface
インスタンス化 できない できない
継承の数 1つのみ 複数可能
プロパティ 抽象プロパティ/具象プロパティ 抽象プロパティのみ
メソッド 抽象メソッド/具象メソッド 抽象メソッド/具象メソッド
コンストラクタ 実装可能 実装不可

使い方

抽象クラスとして定義するにはabstractを付与して定義します。中には規格として定義しておきたいプロパティやメソッドを抽象/具象を指定して定義できます。

abstract class Human {
    // 抽象プロパティ
    abstract var name: String
    // 具象プロパティ
    var age: Int = 0
    // 抽象メソッド
    abstract fun selfIntroduction()
    // 具象メソッド
    fun printName() {
        print(name)
    }
}

抽象プロパティ (abstract var name: String)

nameabstractを付与して抽象プロパティとして定義しています。抽象プロパティは実装を持たないのでサブクラスでオーバーライドする必要があります。

具象プロパティ (var age: Int = 0)

age具象プロパティとして定義しています。具象プロパティには初期値を指定できサブクラスでオーバーライドしなくても問題ありません

抽象メソッド (abstract fun selfIntroduction())

selfIntroduction抽象メソッドとして定義しています。抽象メソッドは実装を持たないのでサブクラスでオーバーライドして実装する必要があります。

具象メソッド (fun printName())

printName具象メソッドとして定義しています。具象メソッドには実装を指定できサブクラスでオーバーライドしなくても問題ありません

サブクラスに継承させる

サブクラスに継承させるにはサブクラス名: 抽象クラス()とします。抽象メンバーとして定義していたものはサブクラスを定義した際にオーバーライドして実装する必要があります。サブクラスに継承させることのできる抽象クラスは1つまでです。

class TargetPerson : Human() {
    override var name: String = "ame"

    override fun selfIntroduction() {
        println("Hi! My Age is $age")
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index