Scala学习笔记--Constructor

Scala的类和java中的类很相似,但是scala中的类表达更精炼
class Counter{
//在scala中类中定义的实例默认是public
//必须初始化
private var value = 0
//方法默认是公有的
def increment(){value += 1}
}
在scala中,getter和setter分别叫做:age和age_=。
//var定义的,privateAge私有字段既有setter方法又有getter方法
private var privateAge = 0
def age = privateAge
def age_=(newValue:Int){
if(newValue > privateAge) privateAge = newValue
}
//如果换成val定义,则只有getter方法
private var privateAge = 0
…………
//则会报错
if(newValue > privateAge) privateAge = newValue

calss Counter {
    private var value = 0
    def increment(){ value += 1}
    //可以访问另一个对象的私有字段
    //因为other也同样是Counter对象
    def isLess(other:Counter) = value < other.value
} 
对象私有化: //对于对象私有字段,Scala根本不会生成getter或setter方法
private[this] var value = 0 //类似某个对象.value这样的访问将不被允许
这样一来Counter类的方法只能访问到当前对象的value字段,而不能访问同样是Counter类型的其他对象的该字段

Constructor(构造器)
auxiliary constructor(辅助构造器)
1>辅助构造器的名称为:this
2>每一个辅助构造器都必须以一个先前已定义的其他辅助构造器或主构造器的调用开始
3>主构造器中的属性在类创建的时候就会被执行,而方法则是被调用的时候再回执行
例如:
class Person{
private var name = “”
private var age = 0
//辅助构造器
def this(name:String){
//调用主构造器,一定要
this()
this.name = name
}
def this(name:String,age:Int){
//调用前一个辅助构造器
this(name)
this.age = age
}
}

primary constructor(主构造器)
例如:
//主构造器后面直接跟类名之后
class Person(val name: String, val age: Int){
println(“Just constructed another person”)
def decription = name + “is” + age + “year old”
}
//如果不带val或var,则下面的name和age,是不可变的字段,
//而这个两个字段都是对象私有的相当于private[this]val
class Person(name:String,age:Int){
def description = name + “is” + age + “years old”
}

嵌套类
内部类隶属于外部类的对象
因此:内部类可以通过外部类创建一个实例对象然后就可以引用访问了。
例如:
object OOPInScala{
//outer=>给外部类指定一个名称 outer就指向Outer.this
class Outer(val name:String){outer =>
class Inner(val name:String){
//b.name指的是内部类的name
//out.name指的是外部类的name
def foo(b:Inner) = println(“Outer: ” + outer.name + “Inner: ” + b.name)
}
}
def main(args:Array[String]){
val outer1 = new Outer(“Spark”)
val outer2 = new Outer(“Hadoop”)
val inner1 = new outer1.Inner(“Scala”)
val inner2 = new outer2.Inner(“Java”)
inner1.foo(inner1)
inner2.foo(inner2)
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值