Kotlinのthis・superキーワードとは?意味と使い分けを初心者向けにわかりやすく解説
生徒
「Kotlinでthisやsuperって出てきたんですが、何に使うんですか?」
先生
「いい質問です。thisは『自分自身』、superは『親クラスの機能』を使うときに使います。具体例を見てみましょう!」
生徒
「親クラスとか、自分自身って、どう区別するんですか?」
先生
「それでは、順番に説明をしていきますね。」
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を使う理由は?名前のあいまいさを避けるため
thisは「自分のプロパティ」と「関数の引数やローカル変数」が同じ名前になったときに力を発揮します。Kotlinのクラス設計では、引数名=プロパティ名とすることが多く、そのまま書くとどちらを指しているのか読み手に伝わりにくくなります。そこでthis.プロパティ名と明示して、「自分のフィールドを更新している」ことをはっきり示します。
class Person(val name: String) {
var greeting = ""
fun updateGreeting(name: String) {
// 左は自分のプロパティ、右は引数の name
this.greeting = "こんにちは、" + name + "さん(本当は" + this.name + ")"
}
}
上の例では、nameだけだと「引数のname」を指します。一方で、this.nameは「Personが持つnameプロパティ」を意味します。こうして書き分けることで、Kotlin初心者でも処理の意図を追いやすくなります。
つぎは、よくあるつまずきです。プロパティに代入したいのに、同名の引数に代入してしまい、何も起きないパターンです。
// よくある間違い
class Title(var text: String) {
fun rename(text: String) {
text = text // 右も左も引数の text を見ている(プロパティは変化しない)
}
}
// 正しくは this を付けて、左側がプロパティだと明示する
class Title2(var text: String) {
fun rename(text: String) {
this.text = text // 自分の text プロパティに、引数 text の値を代入
}
}
thisを付けるだけで、「左=自分のプロパティ」「右=引数」という関係が明確になります。コンストラクタやセッター風メソッド、フォーム入力の反映など、Kotlinで値を受け取って状態を更新する場面では定番の書き方です。
thisは省略可能でも、同名の変数が登場する場所では付けると読み手に親切。- 「プロパティに代入する行」では
this.プロパティ名 = 引数名の形に統一すると、Kotlinコードが安定して理解しやすくなる。 - ローカル変数名に迷ったら、
newTextやinputTextなど少し変えるとthisの出番を減らせる。
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の違い
this=そのクラス自身(自分)super=親クラス(スーパークラス)
この違いをイメージするには、家族の会話のように考えると分かりやすいです。thisは自分、superは親の意見や動作を受け継ぐときに使います。
5. Kotlin初心者が使ってみたい実践例
たとえば次のような例では、thisとsuperの使い分けが自然です:
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?
this=自分のプロパティや関数、引数と混同されやすい変数名のときsuper=親クラスの処理を残しつつ、自分の処理を追加したいとき
この使い分けを覚えると、継承やインスタンスのコードがとても読みやすくなります。
まとめ
Kotlinのthisとsuperは、オブジェクト指向プログラミングにおけるとても大切なキーワードです。thisは「自分自身」、superは「親クラス」を指す言葉であり、どちらもクラスや継承を使った開発で頻繁に登場します。
初心者にとっては、コードを読んでいると突然現れるこれらの単語に戸惑うかもしれません。しかし、基本的な使い方を覚えれば、コードの見通しもぐんと良くなり、保守もしやすくなります。
thisの使いどころ
自分のクラスのプロパティや関数を明示的に指すとき、特に関数の引数とプロパティ名が同じになっているときは、thisを使うことで誤解を防ぐことができます。これにより、意図した処理が正しく行われ、コードの可読性も向上します。
superの役割とは?
superは、親クラスに定義された関数やプロパティを呼び出すときに使います。Kotlinでは継承がサポートされており、親クラスの振る舞いを引き継ぎつつ、自分のクラスで上書き(オーバーライド)するケースも多くあります。そのとき、親の処理を呼んでから自分の処理を足すという場面でsuperは非常に便利です。
実際に書いて試してみよう
ここでthisとsuperの使い方を同時に使った簡単なサンプルを見てみましょう。
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学習にもつながる知識
今回紹介したthisとsuperは、Kotlinだけでなく、Javaや他のオブジェクト指向言語でも基本となる概念です。特にAndroidアプリ開発では、これらを活用する機会がとても多いため、早い段階で慣れておくと、実践的なコードも理解しやすくなります。
また、Kotlinではラムダ式やインナークラスなどの場面でもthisやsuperが使われることがあるため、今回の内容を土台にして、さらに応用的なテーマへと理解を広げていけます。
生徒
「thisは『自分』で、superは『親』っていうのがやっと分かってきました!」
先生
「その調子です。関数の中でthisを使えば、自分のプロパティと引数を区別できますし、superは親クラスの処理を引き継ぐのに使えますよ。」
生徒
「Catクラスでsuperとthisを両方使うの、ちょっと感動しました。親の機能も使えて、子どもとして名前も言えるって感じがしました!」
先生
「まさにその通りです。これがクラスの継承やオブジェクト指向の基本ですから、今後いろんな場面で出てくるのでしっかり使い慣れていきましょうね。」
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
この記事を読んだ人からの質問
プログラミング初心者からのよくある疑問/質問を解決します
Kotlinのthisとは具体的に何を指しているのですか?
Kotlinで使うthisキーワードは、「自分自身のインスタンス」を指します。つまり、今まさに動いているクラスやオブジェクトそのものを示す特別な言葉です。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
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 基本文法、継承、オーバーライド、クラス設計、初心者、親子関係、インスタンスメソッド。