カテゴリ: Kotlin 更新日: 2025/12/15

Kotlinのthis・superキーワードとは?意味と使い分けを初心者向けにわかりやすく解説

Kotlinのthis・superキーワードの意味と使い分け例
Kotlinのthis・superキーワードの意味と使い分け例

先生と生徒の会話形式で理解しよう

生徒

「Kotlinでthissuperって出てきたんですが、何に使うんですか?」

先生

「いい質問です。thisは『自分自身』、superは『親クラスの機能』を使うときに使います。具体例を見てみましょう!」

生徒

「親クラスとか、自分自身って、どう区別するんですか?」

先生

「それでは、順番に説明をしていきますね。」

1. thisキーワードとは?自分を指す言葉

1. thisキーワードとは?自分を指す言葉
1. thisキーワードとは?自分を指す言葉

thisは、「いま動いている自分自身のインスタンス」を指す特別なキーワードです。Kotlinでは自分のプロパティや関数にアクセスするとき、多くの場合はthisを省略できますが、はっきり示したいときや読みやすさを上げたいときにthisを書きます。初心者の方は「this=このオブジェクト」と覚えると迷いません。

まずは最小の例で、プロパティ参照とメソッド呼び出しの両方を確認してみましょう。


class Person(val name: String) {
    fun greet() {
        // 自分のプロパティへアクセス(thisは省略可能)
        println("こんにちは、" + this.name + "さん!")
        // 自分の別メソッドを呼び出す(明示すると読みやすい)
        this.showSignature()
    }
    fun showSignature() {
        println("(発信者: " + this.name + ")")
    }
}

fun main() {
    val person = Person("太郎")
    person.greet()
}

こんにちは、太郎さん!
(発信者: 太郎)

上の例では、this.nameが「自分のnameプロパティ」を指し、this.showSignature()で「自分のメソッド」を呼び出しています。thisを付けることで、「いま参照しているのは自分の中身」だと読み手に伝えやすくなります。Kotlinの基本として、クラス内でthisは常に現在のインスタンスを表す、という点をまず押さえておきましょう。

2. thisを使う理由は?名前のあいまいさを避けるため

2. thisを使う理由は?名前のあいまいさを避けるため
2. thisを使う理由は?名前のあいまいさを避けるため

コンストラクタの引数とプロパティの名前が重なるとき、thisが重要になります。たとえば:


class Person(val name: String) {
    var greeting = ""

    fun updateGreeting(name: String) {
        this.greeting = "こんにちは、${name}さん(本当は${this.name})"
    }
}

このようにnameだけだと引数を指しますが、this.nameはプロパティを指すため、正しく区別できます。

3. superキーワードとは?親クラスを指す言葉

3. superキーワードとは?親クラスを指す言葉
3. superキーワードとは?親クラスを指す言葉

superは、「親(スーパークラス)の機能にアクセスする」ためのキーワードです。たとえば、親クラスの関数を呼び出したいときに使います。


open class Animal {
    open fun sound() = println("いきものの音")
}

class Dog : Animal() {
    override fun sound() {
        super.sound()
        println("ワンワン!")
    }
}

fun main() {
    Dog().sound()
}

いきものの音
ワンワン!

この場合、super.sound()によって親の処理を呼び出し、その後自分の処理を追加しています。

4. thisとsuperの違い

4. thisとsuperの違い
4. thisとsuperの違い
  • this=そのクラス自身(自分)
  • super=親クラス(スーパークラス)

この違いをイメージするには、家族の会話のように考えると分かりやすいです。thisは自分、superは親の意見や動作を受け継ぐときに使います。

5. Kotlin初心者が使ってみたい実践例

5. Kotlin初心者が使ってみたい実践例
5. Kotlin初心者が使ってみたい実践例

たとえば次のような例では、thissuperの使い分けが自然です:


open class Vehicle(val name: String) {
    open fun move() = println("${name}が進みます")
}

class Car(name: String) : Vehicle(name) {
    override fun move() {
        super.move()
        println("${this.name}(車)が走行中")
    }
}

super.move()で親の動きを呼び出し、追加処理として「車が走行中」と出します。

6. 使い分けのポイント:いつthis?いつsuper?

6. 使い分けのポイント:いつthis?いつsuper?
6. 使い分けのポイント:いつthis?いつsuper?
  • this=自分のプロパティや関数、引数と混同されやすい変数名のとき
  • super=親クラスの処理を残しつつ、自分の処理を追加したいとき

この使い分けを覚えると、継承やインスタンスのコードがとても読みやすくなります。

まとめ

まとめ
まとめ

Kotlinのthissuperは、オブジェクト指向プログラミングにおけるとても大切なキーワードです。thisは「自分自身」、superは「親クラス」を指す言葉であり、どちらもクラスや継承を使った開発で頻繁に登場します。 初心者にとっては、コードを読んでいると突然現れるこれらの単語に戸惑うかもしれません。しかし、基本的な使い方を覚えれば、コードの見通しもぐんと良くなり、保守もしやすくなります。

thisの使いどころ

自分のクラスのプロパティや関数を明示的に指すとき、特に関数の引数とプロパティ名が同じになっているときは、thisを使うことで誤解を防ぐことができます。これにより、意図した処理が正しく行われ、コードの可読性も向上します。

superの役割とは?

superは、親クラスに定義された関数やプロパティを呼び出すときに使います。Kotlinでは継承がサポートされており、親クラスの振る舞いを引き継ぎつつ、自分のクラスで上書き(オーバーライド)するケースも多くあります。そのとき、親の処理を呼んでから自分の処理を足すという場面でsuperは非常に便利です。

実際に書いて試してみよう

ここでthissuperの使い方を同時に使った簡単なサンプルを見てみましょう。


open class Animal(val type: String) {
    open fun introduce() {
        println("私は${type}です。")
    }
}

class Cat(type: String, val name: String) : Animal(type) {
    override fun introduce() {
        super.introduce()  // 親クラスのintroduce()を呼ぶ
        println("私の名前は${this.name}です。")  // 自分のプロパティにアクセス
    }
}

fun main() {
    val cat = Cat("ネコ", "ミケ")
    cat.introduce()
}

私はネコです。
私の名前はミケです。

上記の例では、super.introduce()で親のメッセージを出し、this.nameで自分のプロパティにアクセスしています。こうすることで、継承関係を意識した柔軟なコードが書けるようになります。

今後のKotlin学習にもつながる知識

今回紹介したthissuperは、Kotlinだけでなく、Javaや他のオブジェクト指向言語でも基本となる概念です。特にAndroidアプリ開発では、これらを活用する機会がとても多いため、早い段階で慣れておくと、実践的なコードも理解しやすくなります。

また、Kotlinではラムダ式やインナークラスなどの場面でもthissuperが使われることがあるため、今回の内容を土台にして、さらに応用的なテーマへと理解を広げていけます。

先生と生徒の振り返り会話

生徒

「thisは『自分』で、superは『親』っていうのがやっと分かってきました!」

先生

「その調子です。関数の中でthisを使えば、自分のプロパティと引数を区別できますし、superは親クラスの処理を引き継ぐのに使えますよ。」

生徒

「Catクラスでsuperとthisを両方使うの、ちょっと感動しました。親の機能も使えて、子どもとして名前も言えるって感じがしました!」

先生

「まさにその通りです。これがクラスの継承やオブジェクト指向の基本ですから、今後いろんな場面で出てくるのでしっかり使い慣れていきましょうね。」

理解度のクイズ問題

理解度のクイズ
この記事の理解度をクイズで確認しよう

空欄の★に当てはまる内容を答えてください。

問題
Kotlinにおける継承の場面では、親クラスの処理を引き継ぎつつ、子クラスで独自の処理を追加したいケースがあります。 そのような場合、子クラス内で親の関数を明示的に呼び出すには super を使います。 また、引数とプロパティ名が重複するような場合に、自分自身のプロパティを参照したいときは this を使うことで、混同を避けることができます。 この2つは、Kotlinのクラス設計やオーバーライドの理解において基本となるキーワードです。
open class Animal(val name: String) {
    open fun speak() {
        println("${name}が鳴いています")
    }
}

class Cat(name: String) : Animal(name) {
    override fun speak() {
        super.speak()
        println("${this.name}はニャーと鳴きます")
    }
}
【ヒント】 ・superは親クラスの関数やプロパティを使いたいとき。 ・thisは自身のプロパティや関数を明示したいときに使う。 ・関連キーワード:Kotlin 基本文法、継承、オーバーライド、クラス設計、初心者、親子関係、インスタンスメソッド。

下記をクリックすると、解答が表示されます
関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
New2
Go言語
Go言語のスライスでappend時のメモリの仕組みを理解しよう!初心者でもわかる基礎解説
New3
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New4
Go言語
Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Swift
Swiftで数値と文字列を相互変換!NumberFormatterで桁区切りや通貨表示をわかりやすく解説
No.5
Java&Spring記事人気No5
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.6
Java&Spring記事人気No6
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.7
Java&Spring記事人気No7
Kotlin
Kotlinで画面遷移を実装しよう!初心者でもわかるIntentの使い方完全ガイド
No.8
Java&Spring記事人気No8
Swift
SwiftPMでのバージョン指定と互換性の考え方を初心者向けに徹底解説