1.21



包就是文件夹,用 package 修饰,可以区分重名类。

作用域:

子包可以直接访问父包中的内容。

上层访问下层内容时,可以通过导包(import)或者写全包名的形式实现。

如果上下层有相同的类,使用时采用就近原则(优先使用下层)。

包对象:

要定义在父包中,一般用于对包的功能进行补充、增强。

可见性:

通过访问权限修饰符 private、protected、默认来限定访问修饰符。

格式:

访问修饰符[包名]

引入:

Scala 默认引入了 java.lang 包的全部内容,scala 包以及 Predef 包的部分内容。

包的引入不限于Scala 文件的顶不,而是可以编写到任何需要使用的地方。

如果需要导入某个包中的所有类和特质,使用下划线 _ 实现。

如果需要的时某个包的某几个类和特质,可以通过选取器 {}实现。

如果引入的多个包含有相同的类,可以通过重命名或隐藏解决。

重命名格式:

import java.util.{HashSet => JavaSet}

隐藏格式:

import java.util.{HashSet => _,_}//引入util包下除了HashSet的类

样例类
样例类是一种特殊类,一般用于保存数据,在并发编程以及 Flink 等框架中会经常使用。

格式:

case class 样例类名([var/val] 成员变量名1:类型1...)

如果不写,变量默认修饰符是val。如果要实现某个成员变量值可以被修改,则需要手动添加var 修饰。

示例:

object ClassDemo {

case class Person(val name:String, var age:Int)

def main(args: Array[String]): Unit = {
val person = new Person(name = "sjh", age = 24)
//person.name = "" 不可修改
person.age = 0
}

}

样例类的默认方法

apply

可以快速使用类名创建对象,省略 new 关键字。

toString

可以在打印时直接打印该对象各个属性值。

equals

可以直接使用 == 直接比较属性值。

hashCode

同一个对象哈希值一定相同,不同对象哈希值一般不同。

copy

可以用来快速创建属性值相同的实例对象,还可以使用带名参数的形式给指定的成员变量赋值。

unapply

示例:

object ClassDemo {

case class Person(var name:String, var age:Int)

def main(args: Array[String]): Unit = {
val person = Person(name = "sjh", age = 24)
println(person)//Person(sjh,24)
val person1 = person.copy(age = 20)
println(person1)//Person(sjh,20)
}

}

样例对象
用 case 修饰的单例对象就叫样例对象,而且它没有主构造器,主要用在:

枚举值
作为没有任何参数的消息传递
示例:

object ClassDemo {

//特质 Sex,表示性别
trait Sex

//样例对象,表示男,继承 Sex 特质
case object Male extends Sex

//样例对象,表示女,继承 Sex 特质
case object Female extends Sex

//定义样例类 Person
case class Person(var name:String, var sex:Sex){}

def main(args: Array[String]): Unit = {
val p = Person("sjh", Male)
}

}


案例:计算器
定义样例类 Calculate,并在其中添加四个方法分别用来计算两个整数的加减乘除操作。

object ClassDemo {

case class Calculate(a:Int, b:Int){
def add(): Int = a + b
def sub(): Int = a - b
def mul(): Int = a * b
def div(): Int = a / b
}

def main(args: Array[String]): Unit = {
val res = Calculate(1, 1)
println(s"加法: ${res.add()}")//2
println(s"减法: ${res.sub()}")//0
println(s"乘法: ${res.mul()}")//1
println(s"除法: ${res.div()}")//1

}

}

 

posted @ 2025-02-07 13:50  七安。  阅读(20)  评论(0)    收藏  举报