面向对象
单例对象
在Scala 中,是没有static 这个东西的,但是可以使用关键字object,使用object修饰的类是单例的,而且类中的方法/属性都是static的。
在scala中被object关键字修饰的类有如下特征:
- 是单例的(内存中只有一个对象)
- 类中的所有属性和方法都是静态的
- 不需要通过new来创建对象,直接通过类名使用
- 通常用于封装一些常量、工具类等 调用方式:类名.属性/方法
package day03
object ScalaSingleton {
def saySomething(msg: String)={
println(msg)
}
}
object ScalaSingletonTest{
def main(args: Array[String]): Unit = {
ScalaSingleton.saySomething("hello scala") //hello scala
println(ScalaSingleton)
println(ScalaSingleton)
//day03.ScalaSingleton$@47f37ef1
//day03.ScalaSingleton$@47f37ef1
}
}
Scala类
/*
* 在 Scala中,类并不用声明为 public。
* 如果你没有定义构造器, 类会有一个默认的空参构造器
*
* var 修饰的变量, 这个变量对外提供 getter setter 方法
* val 修饰的变量, 对外提供了 getter 方法,没有 setter
* */
class Student {
// _ 表示一个占位符, 编译器会根据你变量的具体类型赋予相应初始值
// 注意: 使用_ 占位符是, 变量类型必须指定
var name : String = _
// 错误代码, val 修饰的变量不能使用占位符
// val age: Int = _
val age : Int = 10
}
object Test{
val name : String = "zhangsan"
def main(args: Array[String]): Unit = {
// 调用空参构造器,可以加() 也可以不加
val student = new Student()
student.name = "lisi"
// 类中使用 val 修饰的变量不能更改
// student.age = 20
println(s"student.name ====== ${student. name} ${student.age }")
println ("Test.name======" + Test. name )
}
}
定义在类后面的为类主构造器, 一个类可以有多个辅助构造器
/*
* Student1(val name: String, var age: Int)
* 定义个 2 个参数的主构造器
* */
class Student1 (val name: String, var age: Int) {
var gender : String = _
// 辅助构造器, 使用 def this
// 在辅助构造器中必须先调用类的主构造器
def this(name: String, age:Int, gender: String){
this(name, age)
this. gender = gen