一、java封装与scala封装
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。Java封装操作如下,
(1)将属性进行私有化
(2)提供一个公共的set方法,用于对属性赋值
(3)提供一个公共的get方法,用于获取属性的值
Scala中的public属性,底层实际为private,并通过get方法(obj.field())和set方法(obj.field_=(value))对其进行操作。所以Scala并不推荐将属性设为private,再为其设置public的get和set方法的做法。但由于很多Java框架都利用反射调用getXXX和setXXX方法,有时候为了和这些框架兼容,也会为Scala的属性设置getXXX和setXXX方法(通过@BeanProperty注解实现)。
二、访问权限
(1)Scala 中属性和方法的默认访问权限为public,但Scala中无public关键字。
(2)private为私有权限,只在类的内部和伴生对象中可用。
(3)protected为受保护权限,同类、子类可以访问,同包无法访问。
(4)private[包名]增加包访问权限,包名下的其他类也可以使用
三、方法
在类中,格式为
def 方法名(参数列表) [:返回值类型] = {
方法体
}
四、构造器
Scala类的构造器包括:主构造器和辅助构造器
(1)辅助构造器,函数的名称this,可以有多个,编译器通过参数的个数及类型来区分。
(2)辅助构造方法不能直接构建对象,必须直接或者间接调用主构造方法。
(3)构造器调用其他另外的构造器,要求被调用构造器必须提前声明。
def main(args: Array[String]): Unit = {
// 调用对应的构造器
val person0 = new Person
val person1 = new Person
val person2 = new Person
// scala中的构造器区分 主构造器和辅助构造器
// 主构造器就是类声明的地方
class Person() {
// 整个类中的代码都是主构造器的代码
println("主构造器的调用")
var name: String = "zhangsan"
var age: Int = 10
// 辅助构造器
def this(name: String) = {
// 辅助构造器的第一行 必须直接或者间接的调用主构造器
this()
println("辅助构造器调用")
this.name = name
}
// 间接调用主构造器
// 如果辅助构造器直接相互调用的话 只能是写在后面的构造器调用前面的构造器
def this(name: String, age: Int) = {
// 通过调用别人的辅助构造器 间接调用主构造器
this(name)
println("辅助构造器2调用")
this.age = age
}
五、构造器参数
Scala类的主构造器函数的形参包括三种类型:未用任何修饰、var修饰、val修饰
(1)未用任何修饰符修饰,这个参数就是一个局部变量
(2)var修饰参数,作为类的成员属性使用,可以修改
(3)val修饰参数,作为类只读属性使用,不能修改
case样例类
// 主构造参数
//(1)未用任何修饰符修饰,这个参数就是一个局部变量
// 同时和类中的属性是不能够冲突的
//(2)var修饰参数,作为类的成员属性使用,可以修改
//(3)val修饰参数,作为类只读属性使用,不能修改
class Person06(val name: String, var age: Int) {
def test():Unit = {
println("姓名:"+name +"年纪:"+ age)
}
}
// 样例类 默认使用主构造器参数 默认就是val var需要自己写处理
// 同时会生产大量的方法 直接使用
case class Person061( name: String, var age: Int){}