Khoá học: Thiết lập dự án Wordpress

Nếu bạn đang tìm kiếm một cách nhanh chóng và hiệu quả để thiết lập một trang web cá nhân hoặc doanh nghiệp của mình, hãy bắt đầu với WordPress. Được coi là nền tảng quản lý nội dung (CMS) phổ biến nhất trên thế giới, WordPress cho phép bạn dễ dàng tạo ra một [...]

[Tự học Kotlin] Class lồng nhau và class con trong Kotlin

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

Nội dung chính

1. Class lồng nhau trong Kotlin

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

class Outer {
    ... .. ...
    class Nested {
        ... .. ...
    }
}

Từ class Nested là một thành viên của class Outer bên ngoài nó, bạn có thể sử dụng ký hiệu . để truy cập class Nested và các thành viên của nó.

2. Ví dụ: Class lồng nhau trong 

/*
Dạy Kèm IT.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: [email protected]
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

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<String>) {
    // 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, kết quả sẽ là:


Inside Nested class.
Function call from inside Nested class.

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

Class lồng nhau trong Kotlin tương tự như static class lồng nhau trong Java.

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

3. Class con trong Kotlin

Các class lồng nhau trong Kotlin không có quyền truy cập vào instance của class 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<String>) {

    val outer = Outer()
    println(outer.Nested().callMe())
}

Đoạn code trên sẽ không được biên dịch vì chúng ta đã cố gắng truy cập thuộc tính foo của class Outer từ bên trong class Nested.


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

4. Ví dụ: Class con trong Kotlin

/*
Dạy Kèm IT.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: [email protected]
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

class Outer {

    val a = "Outside Nested class."

    inner class Inner {
        fun callMe() = a
    }
}

fun main(args: Array<String>) {

    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, kết quả sẽ là:

Using outer object: Outside Nested class.
Using inner object: Outside Nested class.

Bài đọc được đề xuất: Class con ẩn danh

Full series tự học Kotlin từ cơ bản tới nâng cao.

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

  • Group Facebook
  • Fanpage
  • Youtube
  • Instagram
  • Twitter
  • Linkedin
  • Pinterest
  • Trang chủ

Chào thân ái và quyết thắng!


Đăng ký kênh youtube để ủng hộ Dạy Kèm IT nha các bạn, Thanks you!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *