Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Kotlin入門:継承

More than 1 year has passed since last update.

継承

open class Person(var name:String = "山田"){
    open fun show():String{
        return "${this.name}です。30歳です。"
    }
}
class MagickPerson(name:String,var magick:String):Person(name){
    override fun show():String{
        return "${super.show()}得意魔法は${magick}です。"
    }
}
fun main() {
    val mp = MagickPerson("山田太朗","浮遊")
    println(mp.show())
}

継承を使用したコード例です。
クラス、メソッド共に既定がJavaで言うfinalとなっています。
したがって、継承を可能にするには明示的にopen修飾子の付与が必要です。

クラス宣言の後方に「:継承するクラス名(引数)」を記述します。
メソッドをオーバーライドするにはoverrideキーワードをつけます。

実行結果は以下の通りです。

山田太朗です。得意魔法は浮遊です。

抽象クラス・抽象メソッド

抽象メソッドとは、派生クラスで機能を上書きしなければならないように
することのできる仕組みです。

abstract class Person(var name:String,var age:Int){
    abstract fun show():String
}
//抽象クラスの継承
class MagickPerson(name:String,age:Int):Person(name,age){
    override fun show():String{
        return "${this.name}です。年齢は${this.age}歳です"
    }
}
fun main() {
    val mp = MagickPerson("山田",30)
    println(mp.show())
}

abstract修飾子を使用することで、抽象クラス・抽象メソッドを定義できます。
抽象メソッドは{}を持たずシグニチャ※1のみで終了します。

※1シグニチャとはメソッドの名前、およびそのメソッドに対する引数の数と型のこと

抽象メソッドを含んだクラスのことを抽象クラスと言い、
抽象クラスにはabstract修飾子をつけなければなりません。
抽象クラスを継承した派生クラスでは、抽象メソッドのオーバーライドが必須となります。

asura
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away