Scala属性和访问权限
在类中声明的变量就是属性
基本语法
[修饰符] var|val 属性名称 [:类型] = 属性值
在scala中,当使用var声明了一个属性时,scala在编译时会自动为该属性构造类似set和get方法(名字不符合javabean规范)。 一下是反编译的源码
public class User
{
private String name = "zhangsan";
public String name() { return this.name; }
public void name_$eq(String x$1) { this.name = x$1; }
public boolean login()
{
return true;
}
}
在scala中,当使用val声明了一个属性时,scala在编译时会自动为该属性构造类似get方法,并且该方法用final修饰 一下为反编译
public class User1 extends Parent12
{
private final int age = 20;
public int age() { return this.age; }
}
在scala中,属性可以设默认值,通过_
符号,不过val不能设置默认值,val修饰的属性必须显示的初始化,
Bean属性
前面提到Scala生成的set和get方法不符合Bean规范,此时使用@BeanPropetry
package com.atguigu.chapter06
import scala.beans.BeanProperty
object Scala06_BeanPropetry {
def main(args: Array[String]): Unit = {
val user: User1 = new User1
user.setName("zhangsan")
println(user.getName)
}
}
class User1 {
@BeanProperty
var name: String = _
}
访问权限
Scala和java一致,采用public, private,protected 三种访问权限,在不声明访问权限的情况下,Scala使用public作为默认权限,不过没有public这个关键字~
private 为私有属性,只有在类的内部和伴生对象中可用。字类不可用
parivate[包名],指定一个包,在该包中的类也可以使用,子类不可用
protectd 只有本类和子类可以使用。
object Scala04_class {
def main(args: Array[String]): Unit = {
// TODO 面向对象 - class
val user = new User0()
// 实际调用的是方法
// 当给属性赋值时相当于调用底层的set方法
user.name = "sad"
// 当获取对象属性值时相当于调用属性的get方法
user.setId(1)
user.getId
}
}
// scala中声明类不需要使用public,而且可以多次声明
// Scala中的类也可以继承负类
// 声明属性
class User1 {
}
class User2 extends User1 {
}
class User0{
var name : String = null
@BeanProperty
var id : Int = _
// 如果想要属性可以默认初始化
// 声明属性时会给当前类声明私有的属性,并声明属性的类似set和get的方法
// 如果给属性声明 为私有访问权限,那么编译时就是set,get方法就是私有方法
// 当属性采用val声明,那么底层编译时会声明为final,而且不会生成set方法,就无法修改
// 加入注解后同时会生成符合JavaBean规范的set和get方法
// setter : 属性名()
// getter : 属性名_$eq(参数)
// 标准的javaBean规范中要求属性必须要有set,get方法,因此set和get方法必须要以set和get开头
// scala为了解决javabean通用的问题,提供了属性的注解。
var age : Int = _
}