概念
封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。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注解实现)。
访问权限
- java:
public
protected 同包和子类中使用
[default] friendly 同包
private 本类 - scala:
[default] 默认都是public,但是Scala没有public关键字
protected 只能在子类中使用(同包内不行)
private
private为私有权限,只在类的内部和伴生对象中可用。
protected为受保护权限,Scala中受保护权限比Java中更严格,同类、子类可以访问,同包无法访问。
private[包名]增加包访问权限,包名下的其他类也可以使用
案例
权限修饰符案例
package com.scala.testclass Person {private var name: String = "bobo"protected var age: Int = 18private[test] var sex: String = "男"def say(): Unit = {println(name)}}object Person {def main(args: Array[String]): Unit = {val person = new Personperson.say()println(person.name)println(person.age)}}class Teacher extends Person {def test(): Unit = {this.agethis.sex}}class Animal {def test: Unit = {new Person().sex}}
