Java Inner Class

Java Inner Classes (Nested Classes) là gì ? Java Inner Class là một lớp nằm trong một lớp khác. Nó được sử dụng để giải quyết các vấn đề gắn liền với lớp bên trong, và cung cấp một cách linh hoạt để truy cập các thành phần của lớp bên ngoài. Loại inner class

Java Inner Classes (Nested Classes) là gì ?

Java Inner Class là một lớp nằm trong một lớp khác. Nó được sử dụng để giải quyết các vấn đề gắn liền với lớp bên trong, và cung cấp một cách linh hoạt để truy cập các thành phần của lớp bên ngoài. Loại inner class trong Java:

Type Description
Member Inner Class Một lớp được tạo ra bên trong một lớp và bên ngoài phương thức.
Anonymous Inner Class Một lớp được tạo ra để implements interface hoặc extends class. Tên của nó được quyết định bởi trình biên dịch java..
Local Inner Class Một lớp được tạo ra bên trong một phương thức.
Static Nested Class Một lớp static được tạo ra bên trong một lớp.
Nested Interface Một interface được tạo ra bên trong một lớp hoặc một interface.

Member inner class trong java:

Định nghĩa và cú pháp:

  • Member Inner Class là một loại Inner Class trong Java được tạo bên trong một lớp và có thể truy cập và sử dụng các thuộc tính và phương thức của lớp chính. Nó có thể được truy cập từ bất kỳ đâu trong lớp chính và có thể sử dụng các thuộc tính và phương thức của lớp chính.

Cú pháp để tạo một Member Inner Class trong Java như sau:

classOuterClass{...classInnerClass{...}}

Để sử dụng một Member Inner Class, bạn cần tạo một đối tượng của lớp ngoài trước, sau đó sử dụng nó để tạo một đối tượng của Member Inner Class. Ví dụ:

OuterClass outer =newOuterClass();OuterClass.InnerClass inner = outer.newInnerClass();
  • Cần lưu ý rằng, Member Inner Class có thể truy cập các thuộc tính và phương thức của lớp chính nhưng không có quyền truy cập các biến static của lớp chính.

Anonymous inner class trong java:

Định nghĩa:

  • Anonymous inner class là một loại inner class trong Java mà không có tên. Nó được sử dụng khi bạn cần tạo một lớp con nội tại trong một phương thức hoặc trong một khối lệnh.
Cú pháp tạo một Anonymous inner class như sau:
newParentClassOrInterface(){// body of anonymous inner class};

Ví Dụ:

Button button =newButton("Click me");
    button.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEvent event){System.out.println("Button is clicked");}});

Trong ví dụ trên, chúng ta tạo một anonymous inner class để xử lý sự kiện khi nút được nhấn. Anonymous inner class là một cách tiện lợi để tạo một lớp con nội tại mà không cần đặt tên cho nó.

Local inner class trong java:

Định nghĩa:

  • Local Inner Class là một lớp bên trong được khai báo trong một phương thức của lớp bên ngoài. Nó chỉ có thể truy cập các biến cục bộ của phương thức đó và không thể truy cập các biến instance của lớp bên ngoài.

Ví Dụ:

classOuterClass{int x =10;voidmethod(){int y =20;classLocalInnerClass{voiddisplay(){System.out.println(x + y);}}LocalInnerClass inner =newLocalInnerClass();
      inner.display();}}

Trong ví dụ trên, lớp LocalInnerClass là một lớp bên trong được khai báo trong phương thức method của lớp OuterClass. Nó có thể truy cập biến y của phương thức method nhưng không thể truy cập biến x của lớp OuterClass.

Lớp nội được tạo ra bởi trình biên dịch:

importjava.io.PrintStream;classLocalInner1$Local{finalLocalInner1this$0;LocalInner1$Local(){super();this$0=Simple.this;}voidmsg(){System.out.println(LocalInner1.access$000(LocalInner1.this));}}

Static nested class trong java:

Định nghĩa:

  • Static Nested Class là một lớp bên trong được khai báo dưới dạng static trong một lớp bên ngoài. Nó có thể truy cập các biến static của lớp bên ngoài và các biến instance của lớp bên ngoài.
  • Nó có thể truy cập các thành viên dữ liệu tĩnh của lớp ngoài bao gồm cả private.
  • Static nested class không thể truy cập thành viên dữ liệu hoặc phương thức non-static (instance).

Ví dụ:

classOuterClass{staticint x =10;staticclassNestedStaticClass{voiddisplay(){System.out.println(x);}}}

Trong ví dụ trên, lớp NestedStaticClass là một lớp bên trong được khai báo dưới dạng static trong lớp OuterClass. Nó có thể truy cập biến static x của lớp OuterClass.

Lớp nội bộ được trình biên dịch tạo ra:

importjava.io.PrintStream;staticclassTestOuter1$Inner{TestOuter1$Inner(){}voidmsg(){System.out.println((newStringBuilder()).append("data is ").append(TestOuter1.data).toString());}}

Nested Interface trong java:

Định nghĩa:

  • Nested Interface trong Java là một giao diện bên trong được khai báo trong một lớp hoặc giao diện bên ngoài. Nó có thể truy cập những biến static và các phương thức định nghĩa tại lớp hoặc giao diện bên ngoài.
classOuterClass{interfaceNestedInterface{voiddisplay();}}

=> Trong ví dụ trên, giao diện NestedInterface được khai báo trong lớp OuterClass. Nó có thể truy cập các biến static và phương thức định nghĩa trong lớp OuterClass.

Khai báo nested interface bên trong interface:

interface interface_name {// codeinterface nested_interface_name {// code}}

Khai báo nested interface bên trong class:

class class_name {// codeinterface nested_interface_name {// code}}

Ví dụ về nested interface được khai báo bên trong interface:

interfaceShowable{voidshow();interfaceMessage{voidmsg();}}classTestNestedInterface1implementsShowable.Message{publicvoidmsg(){System.out.println("Hello nested interface");}publicstaticvoidmain(String args[]){Showable.Message message =newTestNestedInterface1();// upcasting
        message.msg();}}

Tóm tắt ƯuNhượng Inner Class Java:

Các ưu điểm của Inner Class trong Java:

  1. Sự riêng tư: Inner class có thể truy cập các thành viên private của lớp bên ngoài mà các lớp khác không thể truy cập.

  2. Sự tổng hợp: Inner class có thể tổng hợp các thành viên của lớp bên ngoài.

  3. Sự linh hoạt: Inner class cho phép ta tạo nhiều đối tượng bên trong một lớp bên ngoài.

Nhượng điểm của Inner Class trong Java:

  1. Sự phức tạp: Sự sử dụng của inner class có thể làm cho code phức tạp hơn và khó hiểu hơn.

  2. Sự trễ nảo: Tạo đối tượng cho inner class có thể chậm hơn so với tạo đối tượng cho một lớp bình thường.

  3. Sự không tự do: Inner class chỉ có thể được sử dụng trong lớp bên ngoài, nó không thể được sử dụng một cách độc lập.

Tài liệu tham khảo:

Link Github : https://github.com/hoangtien2k3qx1/Java/tree/main/JavaCore/Java_Inner_Class

JavaPoint: https://www.javatpoint.com/java-inner-class

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ