カテゴリ: Kotlin 更新日: 2026/02/15

Kotlinのネストクラス・内部クラス・匿名クラスの使い方を初心者向けにわかりやすく解説!

Kotlinのネストクラス・内部クラス・匿名クラスの使い方
Kotlinのネストクラス・内部クラス・匿名クラスの使い方

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

生徒

「Kotlinでクラスの中に別のクラスを書くことができるって聞いたんですが、ネストクラスとか内部クラスって何が違うんですか?」

先生

「とても良いポイントですね。ネストクラス、内部クラス、匿名クラスは、それぞれ使い方が違います。順番に、初心者の方にも分かりやすく解説しますよ。」

生徒

「ありがとうございます!コードも見ながら理解したいです。」

先生

「それでは、ネストクラスから順番に学んでいきましょう。」

1. ネストクラス(Nested Class)とは?

1. ネストクラス(Nested Class)とは?
1. ネストクラス(Nested Class)とは?

Kotlinのネストクラス(nested class)とは、クラスの中にさらに別のクラスを入れられる仕組みです。ポイントは、ネストクラスは外側のクラスに自動ではアクセスできないということです。同じファイルに置ける関連コードを1つにまとめたい時に便利です。

イメージしやすい例として、「会社」の中に「部署」がある形を考えてみましょう。部署は会社の一部ですが、部署単体でも動けるイメージです。


class Company {
    // ネストクラス
    class Department {
        fun detail() {
            println("部署クラスが動いています")
        }
    }
}

fun main() {
    // ネストクラスは外側のクラスを作らなくても呼び出せる
    val d = Company.Department()
    d.detail()
}

部署クラスが動いています

このように、Company.Department()のように直接呼び出せるのが特徴です。外側の値に自動アクセスしないため、独立した小さなクラスとして扱いやすく、プログラムの見通しも良くなります。

2. 内部クラス(Inner Class)とは?

2. 内部クラス(Inner Class)とは?
2. 内部クラス(Inner Class)とは?

続いて登場するのが内部クラス(inner class)です。見た目はネストクラスと同じように外側のクラスの中に書きますが、大きな違いは外側のクラスの変数や関数にアクセスできるという点です。

イメージとしては、「家」の中にいる「家族」のようなものです。同じ家にいるので、家の情報を知っているし、使うこともできます。Kotlinではinnerキーワードを付けるだけで内部クラスになります。


class Outer {
    private val outerMessage = "これは外側のメッセージです"

    // 内部クラス
    inner class Inner {
        fun printMessage() {
            // 外側の値にアクセスできる
            println("Innerから呼び出し: $outerMessage")
        }
    }
}

fun main() {
    // 外側のクラスを作ってから、内部クラスを呼び出す
    val inner = Outer().Inner()
    inner.printMessage()
}

Innerから呼び出し: これは外側のメッセージです

このように、内部クラスは外側と強くつながった関係を持ちます。「外側の状態を使って動く小さな仕組み」を作りたい場面に向いており、アプリ設定やデータ保持などでもよく利用されます。初心者でも、外側の情報を共有したい時に内部クラスを思い出すと理解しやすくなります。

3. 匿名クラス(Anonymous Class)とは?

3. 匿名クラス(Anonymous Class)とは?
3. 匿名クラス(Anonymous Class)とは?

次は少し特殊な匿名クラスです。これは名前のないクラスで、あるインターフェースや抽象クラスをその場で実装するときに使います。

一度しか使わないような処理に便利です。


interface ClickListener {
    fun onClick()
}

fun main() {
    val listener = object : ClickListener {
        override fun onClick() {
            println("ボタンがクリックされました")
        }
    }

    listener.onClick()
}

ボタンがクリックされました

このようにobject : インターフェース名と書いて、その場でクラスを作っています。

4. ネストクラス・内部クラス・匿名クラスの違いまとめ

4. ネストクラス・内部クラス・匿名クラスの違いまとめ
4. ネストクラス・内部クラス・匿名クラスの違いまとめ

3つのクラスを簡単に比較してみましょう。

種類 外部クラスにアクセス 使い方
ネストクラス できない 構造を整理したいとき
内部クラス できる 外の変数や関数を使いたいとき
匿名クラス ケースによる 1回限りの簡易クラス

このように、それぞれのクラスには役割と使い道の違いがあります。場面に応じて使い分けるのがポイントです。

5. Kotlinでの活用シーンをイメージしてみよう

5. Kotlinでの活用シーンをイメージしてみよう
5. Kotlinでの活用シーンをイメージしてみよう

Kotlinのクラス構造を整理するために、これらのクラスはとても役立ちます。以下のようなシーンが考えられます:

  • ネストクラス:関連の深いクラスを一つにまとめたい(例:図形とサイズ)
  • 内部クラス:親クラスの状態と密接に関係する(例:アプリの設定と項目)
  • 匿名クラス:一時的なイベント処理(例:クリックイベントやボタン処理)

プログラミング初心者でも、「入れ子構造」や「一度だけ使う小さな仕組み」として理解すれば、使いやすくなります。

まとめ

まとめ
まとめ

Kotlinにおけるネストクラス・内部クラス・匿名クラスの違いと使い分け方を学ぶことで、クラス構造の理解がぐっと深まりました。クラスの中にさらにクラスを定義するという発想は最初は難しく感じるかもしれませんが、実際には「関係のある情報をまとめるための整理術」として非常に実用的です。

まずネストクラスは、外側のクラスに依存せずに使えるため、処理をきれいに分けて再利用性を高めたいときに便利です。データ構造を整理する場面やユーティリティ的なクラスに向いています。一方で、外部のプロパティや関数にアクセスできないため、独立性の高いロジックに限られます。

続いて内部クラス(inner class)は、外側のクラスの状態やプロパティにアクセスできるという特徴があり、密接に関連する機能を分けたいときに使います。特に外部のデータに依存する操作を整理するとき、内部クラスを活用することで見通しのよいコード設計ができます。たとえば、アプリケーションの設定を管理する構造や、外側のデータと強く連動する処理を切り出す場面で効果を発揮します。


// 外側と連携する内部クラスの例
class User(private val name: String) {
    inner class Profile {
        fun showName() {
            println("ユーザー名は $name です")
        }
    }
}

fun main() {
    val profile = User("さくら").Profile()
    profile.showName()
}

最後に紹介した匿名クラスは、ボタンのクリック処理や一度限りのカスタム処理など、簡単な処理をその場で書きたいときにとても便利です。Kotlinではobject : インターフェースという書き方で即席のクラスを定義できるため、冗長なクラス名を省略しつつ機能的な記述が可能になります。特にイベントリスナーや一時的な処理において活躍するでしょう。

Kotlinのこのようなクラス設計機能を理解することで、複雑なコードも読みやすく保ちつつ、再利用性・保守性の高いプログラムを書けるようになります。それぞれのクラスの役割を整理しながら実践を積み重ねることで、自然と効果的な使い分けができるようになります。

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

生徒

「ネストクラス、内部クラス、匿名クラスって、見た目は似てるけど使い方が全然違うんですね!」

先生

「その通りです。ネストクラスは独立性重視、内部クラスは外部との連携、匿名クラスは一時的な使い切り処理というふうに分けて覚えると、実際の開発でも使いやすくなりますよ。」

生徒

「たとえば、アプリの設定とかメニュー処理なら内部クラスが便利そうですね。匿名クラスはクリックイベントとかに使える感じで。」

先生

「いい観察ですね。今回の内容はKotlinの設計力に直結するので、繰り返し書いて慣れることが大切です。」

生徒

「はい!たくさん書いてみて、場面に合わせて使い分けられるようにしたいです。」

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Kotlinのネストクラスと内部クラスの違いがよく分かりません。どう使い分ければいいですか?

Kotlinのネストクラスは外側のクラスにアクセスできない独立したクラスですが、内部クラスはouterというキーワードを使って外側のクラスのプロパティや関数にアクセスできます。外側の情報が必要なら内部クラス、それ以外はネストクラスで構造を整理するのが基本です。
関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説