简介

封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作

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[包名] 增加包访问权限,包名下的其他类也可以使用


例子

  1. class Person {
  2. //只能 chapter01 这个包下能访问
  3. private[chapter01] var name: String = "bobo"
  4. protected var age: Int = _ // 0
  5. @BeanProperty var sex: String = "男"
  6. def say(): Unit = {
  7. println(name)
  8. }
  9. }
  10. class Teacher extends Person {
  11. def test: Unit = {
  12. new Person().age
  13. new Person().sex
  14. new Person().name
  15. }
  16. }
  17. class Animal {
  18. def test: Unit = {
  19. new Person().sex
  20. }
  21. }

方法

  1. def 方法名(参数列表) [:返回值类型] = {
  2. 方法体
  3. }

案例

  1. object Person {
  2. def main(args: Array[String]): Unit = {
  3. val person = new Person()
  4. println(person.sum(10, 20))
  5. }
  6. }
  7. class Person {
  8. def sum(n1: Int, n2: Int): Int = {
  9. n1 + n2
  10. }
  11. }