Scala 类和对象学习笔记
定义类
在Scala中,我们可以使用class
关键字来定义一个类。下面是一个简单的类示例:
scalaCopy Codeclass Person(val name: String, var age: Int) {
def sayHello(): Unit = {
println(s"Hello, my name is $name.")
}
}
这个类名为Person
,有两个属性name
和age
,可以通过构造函数传入。其中name
属性是只读的,age
属性是可读写的。同时还有一个sayHello
方法,可以输出问候语。
实例化对象
我们可以使用new
关键字来实例化一个对象,然后调用其方法或者属性。如下面的例子:
scalaCopy Codeval p = new Person("Alice", 25)
p.sayHello() // 输出 "Hello, my name is Alice."
println(p.age) // 输出 "25"
继承和重载
Scala中也支持类的继承,可以使用extends
关键字来定义一个子类。同时也支持方法的重载。下面是一个继承和重载的例子:
scalaCopy Codeclass Student(name: String, age: Int, val grade: Int) extends Person(name, age) {
override def sayHello(): Unit = {
println(s"Hello, my name is $name and I'm in grade $grade.")
}
def sayHello(to: String): Unit = {
println(s"Hello $to, my name is $name and I'm in grade $grade.")
}
}
val s = new Student("Bob", 18, 12)
s.sayHello() // 输出 "Hello, my name is Bob and I'm in grade 12."
s.sayHello("Alice") // 输出 "Hello Alice, my name is Bob and I'm in grade 12."
在这个例子中,Student
类继承自Person
类,并新增了一个grade
属性。同时重载了sayHello
方法,增加了一个参数。
单例对象
Scala中还有一个非常重要的概念就是单例对象。我们可以使用object
关键字来定义一个单例对象,这个对象只会被实例化一次。单例对象一般用来存放工具方法、常量等数据。
下面是一个单例对象的例子:
scalaCopy Codeobject MathUtils {
val PI: Double = 3.1415926
def abs(x: Double): Double = if (x < 0) -x else x
def max(x: Double, y: Double): Double = if (x > y) x else y
}
val a = 1.5
val b = -2.7
println(MathUtils.abs(b)) // 输出 "2.7"
println(MathUtils.max(a, b)) // 输出 "1.5"
println(MathUtils.PI) // 输出 "3.1415926"
在这个例子中,我们定义了一个单例对象MathUtils
,并定义了常量PI
和工具方法abs
和max
。我们可以直接通过单例对象名来调用其中的方法和属性。
总结
Scala中的类和对象是非常重要的概念,也是面向对象编程中的基础。本文简单介绍了类的定义、对象的实例化、继承和重载、以及单例对象的使用。需要注意的是,Scala中的类和对象定义语法比较灵活,可以参考官方文档进行深入学习。