Kelas Dalam Jawa


Kelas Dalam Jawa

Di Jawa, juga dimungkinkan untuk membuat sarang kelas (kelas di dalam kelas). Tujuan dari kelas bersarang adalah untuk mengelompokkan kelas yang dimiliki bersama, yang membuat kode Anda lebih mudah dibaca dan dipelihara.

Untuk mengakses kelas dalam, buat objek kelas luar, lalu buat objek kelas dalam:

Contoh

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)


Kelas Dalam Pribadi

Tidak seperti kelas "biasa", kelas dalam dapat berupa privateatau protected. Jika Anda tidak ingin objek luar mengakses kelas dalam, nyatakan kelas sebagai private:

Contoh

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);
  }
}

Jika Anda mencoba mengakses kelas dalam pribadi dari kelas luar, terjadi kesalahan:

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



Kelas Dalam Statis

Kelas dalam juga dapat berupa static, yang berarti Anda dapat mengaksesnya tanpa membuat objek dari kelas luar:

Contoh

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

Catatan: sama seperti staticatribut dan metode, statickelas dalam tidak memiliki akses ke anggota kelas luar.


Akses Kelas Luar Dari Kelas Dalam

Salah satu keuntungan kelas dalam, adalah mereka dapat mengakses atribut dan metode kelas luar:

Contoh

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