Tìm hiểu về nested class

I, Nested class

  • Java/Kotlin cho phép bạn định nghĩa 1 class nằm trong 1 class khác.
  • Những class nằm trong 1 class khác gọi là nested class.
  • Nested class chia làm 2 loại: static nested classinner class (non-static nested class).
1
2
3
4
5
6
7
8
9
class OuterClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}

II, Inner class

  • Bởi vì inner class liên kết với 1 instance của outer class nên nó có thể truy cập các member khác của outer class ngay cả khi chúng khai báo với private.
  • Vì nó liên kết với 1 instance của outer class nên nó không thể chứa bất kì static member nào.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class OuterClass {

private int index = 0;

class InnerClass {

// Compiler error do inner class không được chứa bất cứ static member nào
// static int i = 1;

void test(){
System.out.println(" " + index);
}
}
}
  • Một instance của inner class chỉ có thể tồn tại khi có 1 outer class.
1
2
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();

III, Static nested class

  • Giống như static member khác, static nested class liên kết với class chứa nó (không phải liên kết với instance).
  • Do đó, nó không thể sử dụng các member của class chứa nó.
  • static nested class có behavior giống như top-level class.
  • Bạn có thể khởi tạo nó mà không cần đến instance của class chứa nó:
1
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();