package study.classstudy
import scala.beans.BeanProperty
class Person {
//必须初始化字段
//定义一个公有字段name,
//生成面向JVM的类时候,会生成一个私有字段name和对应的公有getter、setter方法
//getter,setter方法分别叫做name,name_
var name = ""
//定义一个私有字段age
//会生成一个私有字段name和对应的私有getter、setter方法
private var age = 0
//方法默认是共有的,返回Unit类型的方法一般不加括号
def addAge() {age += 1}
def myAge = age
//将私有字段的getter和seeter改成公有方法
private var privateHeigth = 0.0
//重新定义getter和setter
//定义getter
def heigth = privateHeigth
// 自定义setter方法的时候一定要注意scala的语法限制,签名、=、参数间不能有空格(这个非常重要)
def heigth_=(heigth : Double) {
privateHeigth = heigth
}
//只有getter方法没有setter方法的属性
//使用val修饰变量,自动只生成getter方法
//会生成一个
val timestamp = new java.util.Date
//如果不希望属性被其他对象访问,只是自己使用
private[this] var weight = 0.0
/*
* 总结:
* 1、var field 生成公有的getter和setter
* 2、private var field 生成私有的getter和setter
* 3、val field 生成公有的getter,不生成setter
* 4、可自定义getter方法:def field = 值
* 5、可自定义setter方法:def field_=(field : 类型){},_=(中间不能存在空格
* 6、利用private[this] var field
* */
// Scala的getter和setter方法的命名与java是不同的,是field和field_=的方式
// 如果要让scala自动生成java风格的getter和setter方法,只要给field添加@BeanProperty注解即可
// 此时会生成4个方法
// sex: String
// sex_=(newValue: String): Unit
// getSex(): String
// setSex(newValue: String): Unit
@BeanProperty var sex : String = _
//辅助构造器(俗称的构造方法)
//构造方法的名称是this
//每一个构造器都必须先调用先前定义的构造器,才能执行其他代码
def this(name : String){
this()
this.name = name
println("this name is " + name)
}
def this(name : String , age : Int){
this()//如果不先调用先前定义好的构造器,下面会报错
this.name = name
this.age = age
println(name +" "+age)
}
}
package study.classstudy
/*
* 主构造器,主构造器声明属性和类的属性声明规则保持一致
* */
class PersonConstructor(
var name : String,
private var age : Int,
val sex : String,
private[this] var weight : Double) {
println(name + " " + age + " " + sex + " " + weight)
}