Javaチュートリアル

Javaホーム Javaイントロ Javaはじめに Java構文 Javaコメント Java変数 Javaデータ型 Java型キャスト Java演算子 Java文字列 Java数学 Javaブール値 Java If ... Else Javaスイッチ JavaWhileループ JavaForループ Javaブレーク/続行 Java配列

Javaメソッド

Javaメソッド Javaメソッドパラメータ Javaメソッドのオーバーロード Javaスコープ Java再帰

Javaクラス

Java OOP Javaクラス/オブジェクト Javaクラス属性 Javaクラスメソッド Javaコンストラクタ Java修飾子 Javaカプセル化 Javaパッケージ/ API Javaの継承 Javaポリモーフィズム Java内部クラス Java抽象化 Javaインターフェイス Java列挙型 Javaユーザー入力 Java日付 Java ArrayList Java LinkedList Java HashMap Java HashSet Javaイテレータ Javaラッパークラス Javaの例外 Java RegEx Javaスレッド Javaラムダ

Javaファイル処理

Javaファイル Javaのファイルの作成/書き込み Java読み取りファイル Javaファイルの削除

Javaハウツー

2つの数字を追加する

Javaリファレンス

Javaキーワード Java文字列メソッド Java数学メソッド

Javaの例

Javaの例 Javaコンパイラ Java演習 Javaクイズ Java証明書


Java内部クラス


Java内部クラス

Javaでは、クラス(クラス内のクラス)をネストすることもできます。ネストされたクラスの目的は、一緒に属するクラスをグループ化することです。これにより、コードが読みやすく、保守しやすくなります。

内部クラスにアクセスするには、外部クラスのオブジェクトを作成してから、内部クラスのオブジェクトを作成します。

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)


プライベートインナークラス

「通常の」クラスとは異なり、内部クラスはまたはである可能性がありprivateますprotected外部オブジェクトが内部クラスにアクセスしないようにする場合は、クラスを次のように宣言しますprivate

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

外部クラスからプライベート内部クラスにアクセスしようとすると、エラーが発生します。

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^



静的内部クラス

内部クラスはstatic、にすることもできます。これは、外部クラスのオブジェクトを作成せずにアクセスできることを意味します。

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5

注:static属性やメソッドと同様に、static内部クラスは外部クラスのメンバーにアクセスできません。


内部クラスから外部クラスにアクセスする

内部クラスの利点の1つは、外部クラスの属性とメソッドにアクセスできることです。

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10