Các lớp lồng nhau & bên trong trong Kotlin

May 09 2023
Kotlin là một ngôn ngữ lập trình hiện đại được sử dụng để phát triển các ứng dụng Android và ứng dụng phía máy chủ. Một trong những tính năng thú vị của Kotlin là hỗ trợ cho các lớp lồng nhau và lớp bên trong.

Kotlin là một ngôn ngữ lập trình hiện đại được sử dụng để phát triển các ứng dụng Android và ứng dụng phía máy chủ. Một trong những tính năng thú vị của Kotlin là hỗ trợ cho các lớp lồng nhau và lớp bên trong. Trong bài viết này, chúng ta sẽ xem xét kỹ hơn các lớp bên trong và lồng nhau trong Kotlin, đồng thời xem cách chúng có thể được sử dụng để cải thiện tổ chức và cấu trúc mã của bạn.

Các lớp lồng nhau

Một lớp lồng nhau là một lớp được định nghĩa bên trong một lớp khác. Trong Kotlin, bạn có thể định nghĩa một lớp lồng nhau bằng cách khai báo nó bên trong lớp bên ngoài bằng cách sử dụng từ classkhóa. Đây là một ví dụ:

class Outer {
    class Nested {
        fun `sayHello`() {
            println("Hello from Nested!")
        }
    }
}

Bạn có thể tạo một thể hiện của một lớp lồng nhau bằng cú pháp:

val nested = Outer.Nested()
nested.`sayHello`() // Output: Hello from Nested!

Một trong những lợi ích của việc sử dụng các lớp lồng nhau là chúng có thể được sử dụng để nhóm các chức năng liên quan lại với nhau. Ví dụ: bạn có thể có một lớp đại diện cho một bảng cơ sở dữ liệu và một lớp lồng nhau đại diện cho một truy vấn trên bảng đó. Bằng cách lồng lớp truy vấn bên trong lớp bảng, bạn có thể giữ các mã có liên quan với nhau và làm cho mã của bạn có tổ chức hơn.

lớp học bên trong

Một lớp bên trong là một lớp lồng nhau có quyền truy cập vào các thành viên của lớp bên ngoài của nó. Trong Kotlin, bạn có thể định nghĩa một lớp bên trong bằng cách sử dụng innertừ khóa trước classtừ khóa. Đây là một ví dụ:

class Outer {
    private val name: String = "Outer"
    
    inner class Inner {
        fun `sayHello`() {
            println("Hello from $name.Inner!")
        }
    }
}

Bạn có thể tạo một thể hiện của lớp bên trong bằng cú pháp:

val outer = Outer()
val inner = outer.Inner()
inner.`sayHello`() // Output: Hello from Outer.Inner!

Một trong những lợi ích của việc sử dụng các lớp bên trong là chúng có thể truy cập các thành viên của lớp bên ngoài, điều này có thể hữu ích trong một số trường hợp nhất định. Ví dụ: bạn có thể có một lớp đại diện cho một danh sách các mục và một lớp bên trong đại diện cho một trình vòng lặp trên danh sách đó. Bằng cách biến iterator thành một lớp bên trong, nó có thể truy cập các thành viên của lớp danh sách, chẳng hạn như kích thước và các phần tử của nó.

Sự khác biệt giữa các lớp lồng nhau và bên trong

Một số khác biệt rõ ràng như sau:

  1. Truy cập các thành viên của lớp bên ngoài: Các lớp lồng nhau không thể truy cập các thành viên của lớp bên ngoài của chúng, trong khi các lớp bên trong thì có thể. Các lớp bên trong có một tham chiếu đến thể hiện của lớp bên ngoài, cho phép chúng truy cập các thuộc tính và chức năng của nó.
  2. Phạm vi: Phạm vi của một lớp lồng nhau được giới hạn trong lớp bao quanh, trong khi phạm vi của một lớp bên trong được giới hạn trong thể hiện của lớp bao quanh. Điều này có nghĩa là một lớp bên trong có thể truy cập các thành viên riêng của thể hiện lớp bên ngoài của nó.
  3. Khởi tạo: Một thể hiện của lớp lồng nhau có thể được tạo mà không có thể hiện của lớp bên ngoài, trong khi một thể hiện của lớp bên trong phải được tạo bằng một thể hiện của lớp ngoài.
  4. Cách sử dụng: Các lớp lồng nhau thường được sử dụng để nhóm các chức năng liên quan lại với nhau, trong khi các lớp bên trong được sử dụng khi bạn cần truy cập các thành viên của lớp bên ngoài từ bên trong lớp lồng nhau.
  5. Cú pháp: Cú pháp để khai báo một lớp lồng nhau chỉ đơn giản là khai báo nó bên trong lớp bên ngoài bằng cách sử dụng classtừ khóa. Cú pháp khai báo một lớp bên trong là sử dụng innertừ khóa trước classtừ khóa.
  6. Đặt tên: Các lớp lồng nhau được đặt tên với tên của lớp bên ngoài theo sau là dấu chấm và tên của lớp lồng nhau. Các lớp bên trong được đặt tên theo tên của lớp bên ngoài, theo sau là dấu chấm và tên của lớp bên trong, đồng thời được liên kết với một thể hiện của lớp bên ngoài.

Phần kết luận

Các lớp bên trong và lồng nhau là một tính năng mạnh mẽ của Kotlin có thể giúp bạn sắp xếp và cấu trúc mã của mình. Bằng cách nhóm các chức năng liên quan lại với nhau, bạn có thể làm cho mã của mình có tổ chức hơn và dễ bảo trì hơn. Và bằng cách sử dụng các lớp bên trong, bạn có thể cấp cho các lớp đó quyền truy cập vào các thành viên của lớp bên ngoài của chúng, điều này có thể hữu ích trong một số trường hợp nhất định. Vì vậy, lần sau bạn