scala主构造器的相关知识
class Person {
// 这里没有加private 默认为公有
var age = 0
@BeanProperty var name: String = _
}
class Person2 {
// 只会生成getter方法
@BeanProperty val name = "name";
private var priage = 0
def age = priage
// set方法中可以控制 字段的状态,可以让这个人不变年轻
def age_=(age: Int) {
if (age > priage) priage = age
}
}
class Person3 {
// 使用多个默认构造器
private var name = ""
// 如果字段是私有的那么生成的setter和getter也是私有的
private var age = 0
def this(name: String) {
this()
this.name = name
}
def this(name: String, age: Int) {
this(name)
this.age = age
}
}
class Person4(val name: String, val age: Int) {
// 执行主构造器时,类中所有语句都会执行一遍
println("constructed another person")
def description = name + " is " + age + " years old"
}
// 也可以使用这种形态的主构造器
@BeanProperty //该注解只能对公有字段
class Person5(val name: String, private var age: Int) {
// 使用val和var的参数会被声明为字段
// val name:String
// private var age:Int
// 即使在类的方法中没有被使用
}
class Person6(val name: String = "", val age: Int = 0) {
// 使用默认值可以减少使用多个辅助构造器
}
class Person7(name: String, age: Int) {
// 没有被声明为val和var,但是在类的方法中该字段被使用了,也会被声明为对象私有字段private[this]
// 如果不在方法中使用那么只能是参数
def desc = name + " is " + age + " years old"
}
object Test21 extends App {
val p = new Person
println(p.age)
p.age = 10
println(p.age)
// val对应的字段,只有getter
val p2 = new Person2
println(p2.age)
p2.age = 20
println(p2.name)
// p2.name = "sdf"
// 使用多个构造器
val p31 = new Person3
val p32 = new Person3("who")
val p33 = new Person3("who",20)
// 这里是访问不到age的
// p33.age = 21;
// 主构造器调用时会执行类中的所有语句
val p4 = new Person4("who", 24)
println(p4.description)
val p5 = new Person5("who",20)
println(p5.name)
// p5.age = 21
// 使用默认参数构造器
val p61 = new Person6
val p62 = new Person6("who")
val p63 = new Person6("who",23)
println(p63.age)
val p7 = new Person7("who",22)
println(p7.desc)
}
本文深入探讨Scala中的构造器概念,包括主构造器的功能、不同类型的构造器如何工作、默认值的使用及其对代码简洁性的影响等。通过具体的类定义实例,帮助读者理解Scala构造器的灵活性和强大功能。
1596

被折叠的 条评论
为什么被折叠?



