scala中定义类
简单的类和无参方法,scala类最简单的形式看上去和java/C++很相似
/*** 定义一个类*/class Counter {// 定义初始化字段未来可期private var value = 0}
在scala中类并不声明为public,一个scala文件中可以包含多个类,所有这些类都具有公开可见性。类中的方法默认都是公有方法。
class Counter {// 定义初始化字段private var value = 0private var name = ""// private[Counter] 修饰符可以定义仅有指定类的方法可以访问此字段,// 这里的类可以是当前定义的类,也可以是包含该类的外部类// private[Counter] var value = 0/*** 默认公有方法* 在scala中类并不声明为public,一个scala文件中可以包含多个类,所有这些类都具有公开可见性*/def increment(): Unit = {value += 1 // 注意此处累计加1与java中写法不一样,scala不支持使用 value++}// 如果count函数代码块中只有一行代码可以简写为 def count() = valuedef count() = {value // 注意在scala中若最后一行数据,则该数据为返回值}// 类中方法的调用, 类似于java中的方式, 需要构造出对象然后调用方法val coun = new Counter// 在scala中如果方法中没有参数可以将后面的 () 省略coun.incrementprintln(coun.count)}
scala中对每个字段都提供了getter和setter方法。scala文件在被JVM编码的时候,会自动创建字段的getter和setter方法,如果字段声明为private那么对应的getter和setter方法也是private。如果字段定义为val,那么只会生成getter方法。如果不需要getter和setter方法,则可以将字段声明为private[this]。
另外我们也可以直接给字段加上@BeanProperty注解 也会自动生成getter和setter方法,通过该注解会生成四个方法:
name:Stringname_(newValue:String):UnitgetName ==> 与Java互操作setName(String newValue):Unit ==> 与Java互操作// 我们也可以重新定义字段的getter和setter方法def privateValue: Int = valuedef privateValue_(newValue: Int): Unit = {this.value = newValue}
与java一样, scala也可以有很多的构造器,不过scala中的主构造器最为重要,其他可以有多个辅助构造器。与Java相比有两个地方不同:
-
-
辅助构造器的名称是this。
-
每一个辅助构造器都必须以一个对先前定义好的其他辅助构造器或主构造器的调用
-
// 定义一个辅助构造器def this(newName: String) {this() // 主构造器this.name = newName}// 定义另外一个辅助构造器def this(newName: String, newValue: Int) {this(name)this.value = newValue}
在scala中每个类都有主构造器,主构造器实际上并不是以this方法定义而是与类定义交织在一起。
/*** 括号中的内容就是主构造器的参数* 1.主构造器中的参数可以是任意形态的* 例如 class Person(val name: String,private var age: Int) {}* 2.构造参数中如果不指定字段类型,默认是 private[this] val** @param name* @param age*/class Person(var name: String, var age: Int) {def desc = name + " is " + age + " years old"}
在scala中几乎可以在任意语法结构中嵌套任意语法结构,可以在函数中定义函数,在类中定义类。
class NetWork {class Member(val name: String) {val contacts = new ArrayBuffer[Member]}private val members = new ArrayBuffer[Member]def join(name: String): Member = {val m = new Member(name)members += mm}}def main(args: Array[String]): Unit = {// 实例化两个不同的类val chatter = new NetWorkval myFace = new NetWorkval jason = chatter.join("jason")val jack = chatter.join("jack")jason.contacts += jackval mark = myFace.join("mark")// 不可以将myFace中的Member添加到chatter.Member元素中// jason.contacts += mark}
扫描二维码
获取更多精彩
WuMaoYin

本文深入探讨Scala中类的定义、属性访问控制、构造器的使用及内部方法调用。解析主构造器与辅助构造器的区别,以及如何在类中嵌套定义其他类。
1319

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



