简介
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作
Java封装操作如下:
(1)将属性进行私有化
(2)提供一个公共的set方法,用于对属性赋值
(3)提供一个公共的get方法,用于获取属性的值
Scala中的public属性,底层实际为private,并通过get方法(obj.field())和set方法(obj.field_=(value))对其进行操作。所以Scala并不推荐将属性设为private,再为其设置public的get和set方法的做法。但由于很多Java框架都利用反射调用get和set方法,有时候为了和这些框架兼容,也会为Scala的属性设置get和set方法(通过@BeanProperty注解实现)
访问权限
在Java中,访问权限分为:public,private,protected和默认,在Scala中,你可以通过类似的修饰符达到同样的效果,但是使用上有区别
(1)Scala 中属性和方法的默认访问权限为public,但Scala中无public关键字
(2)private 为私有权限,只在类的内部和伴生对象中可用
(3)protected 为受保护权限,Scala中受保护权限比Java中更严格,同类、子类可以访问,同包无法访问
(4)private[包名] 增加包访问权限,包名下的其他类也可以使用
例子
class Person {
//只能 chapter01 这个包下能访问
private[chapter01] var name: String = "bobo"
protected var age: Int = _ // 0
@BeanProperty var sex: String = "男"
def say(): Unit = {
println(name)
}
}
class Teacher extends Person {
def test: Unit = {
new Person().age
new Person().sex
new Person().name
}
}
class Animal {
def test: Unit = {
new Person().sex
}
}
方法
def 方法名(参数列表) [:返回值类型] = {
方法体
}
案例
object Person {
def main(args: Array[String]): Unit = {
val person = new Person()
println(person.sum(10, 20))
}
}
class Person {
def sum(n1: Int, n2: Int): Int = {
n1 + n2
}
}