คลาสซ้อนภายใน
คลาสที่อยู่ภายในคลาสอื่น
คลาสซ้อนภายใน เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คลาสภายในคลาส
Kotlin อนุญาตให้คุณประกาศคลาสภายในคลาสอื่น โดยค่าเริ่มต้น คลาสดังกล่าวจะเป็นคลาสซ้อนกันและจะไม่เก็บการอ้างอิงไปยังอินสแตนซ์ภายนอก
class Outer {
class Nested {
fun hello() = "Hi from Nested"
}
}
fun main() {
println(Outer.Nested().hello())
}การสร้างอินสแตนซ์ของคลาสซ้อนกัน
เนื่องจากคลาสซ้อนกันเป็นอิสระจากคลาสภายนอก คุณจึงสร้างคลาสนี้ผ่านชื่อคลาสภายนอกโดยไม่ต้องมีอินสแตนซ์ภายนอก: Outer.Nested()
class Computer {
class Cpu {
val cores = 8
}
}
fun main() {
val cpu = Computer.Cpu()
println(cpu.cores)
}ไม่สามารถเข้าถึงสมาชิกของคลาสภายนอก
คลาสซ้อนกันไม่สามารถมองเห็นสมาชิกอินสแตนซ์ของคลาสภายนอกได้ เพราะไม่มีการอ้างอิงไปยังคลาสภายนอก คลาสนี้ทำงานเหมือนคลาสระดับบนสุดที่อยู่ภายใต้ขอบเขตของชื่อหนึ่ง
class Bank {
val name = "ACME"
class Branch {
fun describe() = "A branch"
}
}
fun main() {
println(Bank.Branch().describe())
}เหตุใดจึงใช้คลาสซ้อนกัน
การซ้อนคลาสช่วยสื่อถึง การจัดกลุ่มเชิงตรรกะ: ชนิดข้อมูลภายในมีความเกี่ยวข้องเชิงแนวคิดกับชนิดข้อมูลภายนอก ทำให้การจัดระเบียบและการจัดพื้นที่ชื่อดีขึ้น
class Http {
class Request(val url: String)
}
fun main() {
val r = Http.Request("/home")
println(r.url)
}คลาส Nested ที่มีพร็อพเพอร์ตี
คลาส Nested เป็นคลาสทั่วไป โดยสามารถมีตัวสร้าง พร็อพเพอร์ตี และเมธอดได้
class Garage {
class Car(val model: String) {
fun honk() = "$model: beep"
}
}
fun main() {
println(Garage.Car("Tesla").honk())
}การเข้าถึงสมาชิกแบบคอมแพเนียนหรือคล้ายสมาชิกแบบคงที่
สามารถอ้างอิงคลาส Nested จากที่ใดก็ได้โดยใช้ชื่อของคลาสภายนอก ซึ่งคล้ายกับคลาส Nested แบบคงที่ใน Java
class Config {
class Defaults {
val timeout = 30
}
}
fun main() {
println(Config.Defaults().timeout)
}คลาส Nested หลายคลาส
คลาสภายนอกสามารถมีคลาส Nested ได้หลายคลาส เพื่อจัดกลุ่มชนิดข้อมูลที่เกี่ยวข้องกัน
class Shapes {
class Circle(val r: Int)
class Square(val side: Int)
}
fun main() {
println(Shapes.Circle(5).r)
println(Shapes.Square(4).side)
}Nested ซ้อนใน Nested
คุณสามารถซ้อนคลาสได้มากกว่าหนึ่งระดับ แต่การซ้อนลึกเกินไปอาจทำให้อ่านโค้ดได้ยาก
class A {
class B {
class C {
val value = 42
}
}
}
fun main() {
println(A.B.C().value)
}Nested เทียบกับระดับบนสุด
ในด้านการทำงาน คลาส Nested ก็เหมือนคลาสระดับบนสุด ความแตกต่างเพียงอย่างเดียวคือชื่อแบบระบุคุณสมบัติ เลือกใช้การซ้อนเมื่อความสัมพันธ์ดังกล่าวช่วยให้โค้ดชัดเจนขึ้น
class Order {
class Item(val price: Int)
}
fun main() {
val total = Order.Item(10).price + Order.Item(5).price
println(total)
}การจัดกลุ่มที่ใช้ได้จริง
การจัดกลุ่มชนิดข้อมูลผลลัพธ์ของ Builder ไว้ภายใต้เจ้าของทำให้อ่านได้อย่างเป็นธรรมชาติ
class Parser {
class Result(val ok: Boolean, val message: String)
fun parse(text: String) = Result(text.isNotEmpty(), "parsed")
}
fun main() {
val res = Parser().parse("data")
println("${res.ok} ${res.message}")
}กฎสำคัญที่ควรจำ
คีย์เวิร์ดที่ทำให้คลาสเก็บการอ้างอิงไปยังคลาสภายนอกคือ inner หากไม่มีคีย์เวิร์ดนี้ คลาส Nested จะมีลักษณะคล้ายคลาสคงที่และแยกเป็นอิสระ
class Box {
class Lid
}
fun main() {
println(Box.Lid() != null)
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับคลาส Nested ของคุณ
สรุปทบทวน
คุณได้เรียนรู้เกี่ยวกับ คลาส Nested:
- ประกาศไว้ภายในคลาสอื่น โดยค่าเริ่มต้นคือ
class(คลาส Nested) - ไม่มีการอ้างอิงไปยังอินสแตนซ์ภายนอก จึงไม่สามารถเข้าถึงสมาชิกของคลาสภายนอกได้
- สร้างโดยใช้ชื่อของคลาสภายนอก:
Outer.Nested() - เหมาะสำหรับการจัดกลุ่มตามตรรกะและการจัดขอบเขตชื่อ
class Outer {
class Nested { val x = 1 }
}
fun main() {
println(Outer.Nested().x)
}คำถามที่พบบ่อย
บทเรียน “คลาสซ้อนภายใน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลาสซ้อนภายใน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลาสซ้อนภายใน”
คลาสที่อยู่ภายในคลาสอื่น คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “คลาสซ้อนภายใน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาสซ้อนภายใน
- คลาสภายใน
- ออบเจ็กต์นิรนาม
- คลาสภายในฟังก์ชัน