scala主构造器的多种玩法

本文深入探讨Scala中的构造器概念,包括主构造器的功能、不同类型的构造器如何工作、默认值的使用及其对代码简洁性的影响等。通过具体的类定义实例,帮助读者理解Scala构造器的灵活性和强大功能。

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)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值