Kotlin lồng nhau và lớp bên trong

Trong bài viết này, bạn sẽ học cách làm việc với các lớp bên trong và lồng nhau với sự trợ giúp của các ví dụ.

Lớp lồng nhau Kotlin

Tương tự như Java, Kotlin cho phép bạn định nghĩa một lớp bên trong một lớp khác được gọi là lớp lồng nhau.

 class Outer (… class lồng nhau (…))

Vì lớp lồng nhau là một thành viên của lớp bao quanh nó là Outer, bạn có thể sử dụng .ký hiệu để truy cập Nestedlớp và các thành viên của nó.

Ví dụ: Kotlin Nested Class

 class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )

Khi bạn chạy chương trình, đầu ra sẽ là:

Bên trong lớp lồng nhau. Gọi hàm từ bên trong lớp lồng nhau.

Đối với người dùng Java

Lớp lồng nhau trong Kotlin tương tự như lớp lồng nhau tĩnh trong Java.

Trong Java, khi bạn khai báo một lớp bên trong một lớp khác, nó sẽ trở thành một lớp bên trong theo mặc định. Tuy nhiên trong Kotlin, bạn cần sử dụng công cụ sửa đổi bên trong để tạo một lớp bên trong mà chúng ta sẽ thảo luận tiếp theo.

Lớp bên trong Kotlin

Các lớp lồng nhau trong Kotlin không có quyền truy cập vào cá thể lớp ngoài. Ví dụ,

 class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )

Đoạn mã trên sẽ không biên dịch vì chúng tôi đã cố gắng truy cập thuộc tính foo của lớp Outer từ bên trong lớp lồng nhau.

Để giải quyết vấn đề này, bạn cần đánh dấu lớp lồng nhau với bên trong để tạo lớp bên trong. Các lớp bên trong mang một tham chiếu đến một lớp bên ngoài và có thể truy cập các thành viên của lớp bên ngoài.

Ví dụ: Kotlin Inner Class

 class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )

Khi bạn chạy chương trình, đầu ra sẽ là:

Sử dụng đối tượng bên ngoài: Bên ngoài lớp lồng nhau. Sử dụng đối tượng bên trong: Bên ngoài lớp lồng nhau.

Đề xuất đọc: Lớp học nội tâm ẩn danh

thú vị bài viết...