Java – Inner class

Java inner class là class được định nghĩa bên trong class khác. Java inner class có thể được khai báo là private, public, protected, hoặc với truy cập mặc định trong khi class bên ngoài có thể chỉ có truy cập public hoặc mặc định.

Các class lồng nhau trong Java được chia thành 2 kiểu:

  1.  Static nested class : Nếu các class lồng nhau là static thì nó được gọi là static nested class. Static nested class có thể chỉ truy cập thành phần static của class bên ngoài. Static nested class giống như bất kỳ class cao cấp nào khác và được lồng vào nhau để thuận tiện cho việc đóng gói. Một static class object có thể được tạo bằng cách sử dụng câu lệnh sau đây
  2.  Java inner class: Bất kỳ class lồng nhau nào mà không phải staic thì được hiểu là inner class. Java inner class được liên kết với object của class và chúng có thể truy cập đến tất cả các biến và phương thức của class bên ngoài. Do inner class được liên kết với instance nên chúng không có bất kỳ biến static nào bên trong. Object của inner class là một phần của object của class bên ngoài. Đầu tiên chúng ta cần tạo object của class bên ngoài trước.Inner class có thể được khởi tạo như sau:

Có 2 kiểu đặc biệt của inner class

local inner class

Nếu một class được định nghĩa bên trong một phương thức thì được gọi là local inner class

Vì local inner class không liên kết với object, nên chúng ta không thể sử dụng truy cập private, public hoặc protected với nó. Modifier được cho phép chỉ có thể là abstract hoặc final

Local inner class có thể truy cập đến toàn bộ thành phần của class kèm theo và các biến local là final trong phạm vi của nó. Ngoài ra, nó có thể truy cập các biến local không phải là final của phương thức mà nó được định nghĩa. Nhưng nó không thể thay đổi giá trị của chúng. Do đó nếu bạn muốn in ra giá trị của các biến local không phải là final thì được phép nhưng nếu bạn muốn thay đổi giá trị của chúng thì bạn sẽ gặp lỗi khi biên dịch.

Local inner class có thể được định nghĩa như sau

Chúng ta có thể định nghĩa một local inner class trong một block ví dụ như là static block, if-else block… Tuy nhiên trong trường hợp này phạm vi của class là tương đối giới hạn.

Chú ý block ở đây nghĩa là trong đoạn code bắt đầu bằng { và kết thúc }

Inner class anonymous (vô danh)

Một local inner class không có tên thì được gọi là inner class vô danh. Một class vô danh được định nghĩa và khởi tạo trong một câu lệnh duy nhất.

Inner class thường extend từ một class hoặc thực thi cho một interface. Bởi vì class vô danh không có tên nên không thể định nghĩa constructor cho class vô danh.

Inner class vô danh chỉ có thể truy cập tại điểm nơi nó được định nghĩa. Nó hơi khó để định nghĩa làm thể nào để tạo một inner class vô danh, chúng ta hãy cùng xem các sử dụng nó trong thực tế thông qua ví dụ bên dưới đây

Ví dụ bên dưới đây sẽ trình bày cách chúng ta tạo một inner class, static nested class, local inner class và inner class vô danh

OuterClass.java

Tiếp theo chúng ta thử viết một chương trình để test đoạn code bên trên

InnerClassTest.java

Kết quả

Ưu điểm inner class

  1. Nếu một class chỉ hữu ích cho một class, ngoài ra có ý nghĩa để giúp các class được lồng nhau và đặt cùng nhau. Nó giúp cho việc đóng gói class
  2. Java inner class thực hiện đóng gói. Chú ý rằng các inner class có thể truy cập thành phần private của class bên ngoài và đồng thời chúng ta có thể ẩn inner class với thế giới bên ngoài
  3. Giúp cho class trở nên nhỏ gọn hơn bên trong các class lớp cao nhất, đặt code gần hơn nơi sử dụng chúng, giúp tăng khả năng duy trì và dễ đọc hơn.

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

avatar
  Subscribe  
Notify of