Scala 类和对象学习笔记

定义类

在Scala中,我们可以使用class关键字来定义一个类。下面是一个简单的类示例:

scalaCopy Code
class Person(val name: String, var age: Int) { def sayHello(): Unit = { println(s"Hello, my name is $name.") } }

这个类名为Person,有两个属性nameage,可以通过构造函数传入。其中name属性是只读的,age属性是可读写的。同时还有一个sayHello方法,可以输出问候语。

实例化对象

我们可以使用new关键字来实例化一个对象,然后调用其方法或者属性。如下面的例子:

scalaCopy Code
val p = new Person("Alice", 25) p.sayHello() // 输出 "Hello, my name is Alice." println(p.age) // 输出 "25"

继承和重载

Scala中也支持类的继承,可以使用extends关键字来定义一个子类。同时也支持方法的重载。下面是一个继承和重载的例子:

scalaCopy Code
class 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 Code
object 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和工具方法absmax。我们可以直接通过单例对象名来调用其中的方法和属性。

总结

Scala中的类和对象是非常重要的概念,也是面向对象编程中的基础。本文简单介绍了类的定义、对象的实例化、继承和重载、以及单例对象的使用。需要注意的是,Scala中的类和对象定义语法比较灵活,可以参考官方文档进行深入学习。