在Scala面向对象编程中,内部类是一种强大的封装机制,它允许在一个类的内部定义另一个类。这种设计不仅使代码组织更加严谨,还能有效避免命名冲突。本文将深入探讨Scala内部类的特性和实际应用。
一、内部类基础概念
什么是内部类?
内部类是定义在另一个类内部的类,它可以访问外部类的所有成员,包括私有成员。这种设计模式在需要紧密耦合的类关系中非常有用。
二、基础内部类实现
简单的内部类定义
package level02
object base2801 {
// 外部类
class Car() {
var wheel: Int = 3
def run(): Unit = {
println("run....")
}
// 内部类
class Engin() {
val power: Int = 12
}
}
def main(args: Array[String]): Unit = {
val c1 = new Car();
var eng = new c1.Engin()
println(eng.power)
}
}
运行结果
代码解析
Car是外部类,包含一个基本属性和方法Engin是内部类,定义在Car类内部- 内部类的实例化语法:
new 外部类实例.内部类() - 内部类可以独立拥有自己的属性和方法
三、内部类访问外部类成员
内部类访问外部类私有成员
package level02
object base2802 {
// 外部类
class Car() {
var wheel: Int = 3
// 私有成员
private var speed: Int = 0
def run(): Unit = {
println(s"速度为:${speed}, run....")
}
// 内部类
class Engin() {
def acc(increment: Int): Unit = {
speed += increment // 内部类可以访问外部类的私有成员
}
}
class AutoPark() {}
}
def main(args: Array[String]): Unit = {
val c1 = new Car();
// c1.speed // 私有成员不能直接访问
c1.run()
val en = new c1.Engin()
en.acc(10) // 通过内部类方法修改外部类私有成员
c1.run()
}
}
运行结果
代码解析
- 内部类
Engin可以访问外部类Car的私有属性speed - 外部类的私有成员对外部不可见,但对其内部类可见
- 通过内部类提供的方法来间接操作外部类的私有状态
- 这种设计实现了良好的封装性