嵌套类
类中的类
嵌套类 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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)
}带属性的嵌套类
嵌套类就是普通的类:可以拥有构造函数、属性和方法。
class Garage {
class Car(val model: String) {
fun honk() = "$model: beep"
}
}
fun main() {
println(Garage.Car("Tesla").honk())
}访问伴生对象或类似静态的成员
可以在任何位置使用外部类名引用嵌套类,其方式类似于 Java 中的静态嵌套类。
class Config {
class Defaults {
val timeout = 30
}
}
fun main() {
println(Config.Defaults().timeout)
}多个嵌套类
外部类可以包含多个嵌套类,将相关类型组织在一起。
class Shapes {
class Circle(val r: Int)
class Square(val side: Int)
}
fun main() {
println(Shapes.Circle(5).r)
println(Shapes.Square(4).side)
}嵌套在嵌套类中
您可以进行多层嵌套,不过嵌套层级过深可能会降低可读性。
class A {
class B {
class C {
val value = 42
}
}
}
fun main() {
println(A.B.C().value)
}嵌套类与顶层类
从功能上看,嵌套类和顶层类类似;唯一的区别是限定名称不同。当这种关系有助于提高代码清晰度时,可以选择嵌套。
class Order {
class Item(val price: Int)
}
fun main() {
val total = Order.Item(10).price + Order.Item(5).price
println(total)
}一种实用的组织方式
将构建器的结果类型放在其所有者之下,读起来很自然。
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。没有它,嵌套类就类似静态类,并且与外部类相互隔离。
class Box {
class Lid
}
fun main() {
println(Box.Lid() != null)
}快速检查
请测试您对嵌套类的理解。
回顾
您了解了嵌套类:
- 声明在另一个类内部,默认是
class(嵌套类)。 - 不引用外部实例,因此无法访问外部成员。
- 通过外部类名创建:
Outer.Nested()。 - 非常适合进行逻辑分组和命名空间管理。
class Outer {
class Nested { val x = 1 }
}
fun main() {
println(Outer.Nested().x)
}常见问题解答
「嵌套类」课时是免费的吗?
是的 — 「嵌套类」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。
「嵌套类」这节课中我会学到什么?
类中的类 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kotlin Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「嵌套类」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kotlin Academy 课中编写并运行代码吗?
能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。