一.内部类的定义
定义在类或者对象内部的类称为内部类。
在类的内部有:属性,方法,类。
package level02
/*
内部类:在类的内部,写另一个类
*/
object Class019 {
class C1 {
class B1 {
def say(): Unit = {
println("B1.....")
}
}
}
def main(args: Array[String]): Unit = {
// 1. 创建一个c1的对象
val c1 = new C1()
// 2. 创建一个B1的对象
val b1 = new c1.B1()
b1.say()
}
}
二.内部类的基本使用
定义格式: class 类 { class 内部类 }
使用格式: new 类的实例.内部类()
内部类的好处
(1)逻辑组织:引擎与 汽车紧密相关,它们都属于汽车的上下文。将它们作为内部类可以使代码更为整洁和逻辑清晰。
(2)简化访问:内部类能够方便地访问外部类的私有成员,这样引擎类可以操作汽车的速度而不需要通过外部接口。
(3)减少命名冲突:由于内部类的作用范围限制在外部类内,避免了名称冲突(在大型项目中,可能会有多个引擎类)。
package level02
object Class020 {
class C1 {
private var score: Int = 85
class B1 {
def addScore(s: Int): Unit = {
score += s
}
def say(): Unit = {
println(s"B1...${score}")
}
}
}
def main(args: Array[String]): Unit = {
val c1 = new C1()
val b1 = new c1.B1()
b1.addScore(10)
b1.say()
}
}
三.内部类的使用案例
在小汽车类的基础上补充私有变量:speed; 并在Car类的内部定义一个Engine类,在这个类中去定义方法去修改speed。
package level02
object Class022 {
class Car {
// 私有变量speed
private var speed: Int = 0
// 内部类Engine,用于修改speed
class Engine {
def accelerate(inc: Int): Unit = {
speed += inc
}
def decelerate(dec: Int): Unit = {
speed = math.max(0, speed - dec)
}
def getSpeed: Int = speed
}
def getEngine: Engine = new Engine()
}
def main(args: Array[String]): Unit = {
val car = new Car()
val engine = car.getEngine
engine.accelerate(60)
println(engine.getSpeed) // 输出60
engine.decelerate(20)
println(engine.getSpeed) // 输出40
}
}
四.内部对象
内部对象,就是定义在class内部的object。
定义格式: class 类名 { object 对象名{ 属性;方法() }}
使用格式:类名.对象名.属性名; 类名.对象名.方法名()
五.匿名类
匿名类指没有名字的类。匿名类只能使用一次。