从java了解类的状况下,了解Scala的类并不难。Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXXX与setXXX方法java
class Counter { // 初始化字段值value private var value = 0 // 方法默认是public的 def increment() { value +=1 } def current() = value } Scala中类没必要声明为public,Scala源文件能够包含多个类,这些类都是默认public的。 // 构造对象调用Counter val counter = new Counter() // 通常习惯对改值器使用(),对取值器不适用() counter.increment() println(counter.current)
public class Person { private int age; public int getAge() {return age} public void setAge(int age) {this.age =age} // 在java中使用set,get方法对属性进行修改获取是比较好的一种方式。Scala中每一个字段默认提供getter和setter方法 // get方法 def age = privateAge // set方法 def age_(newValue: Int): Unit = { if (newValue > privateAge) { privateAge = newValue } } // junit的测试 @Test def testCounter(): Unit = { val counter = new Counter() counter.increment() println(counter.current()) counter.age_(10) println(counter.age) // 类私有的自动没法建立对象.属性调用 } // Scala的字段加@BeanProperty import scala.reflect.BeanProperty class Person { @BeanProperty // 默认会生成get/set方法 var name:String =_ }
定义以this开头的是辅助构造器 /** * 辅助构造器 * * @param username */ def this(username: String) { this() this.username = username } /** * 辅助构造器 * @param username * @param score */ def this(username: String, score: Int) { // 调用上一个构造器 this(name) this.score = score } // 3种方法构建对象 val p1 = new Person val p2 = new Person("Bob") val p3 = new Person("Bob",24) // 构建主构造器 class Person(val name:String="",val age:Int=10) { println("这是构造方法") def des = "name="+name+",age="+age } val pserson = new Person("haha",12) 将会执行主构造方法
和java相似,Scala中也有内部类,可是比java更丰富些,Scala中调用的方式是new OuterClass.innerClass而java中式outClass.new InnerClass()学习
class NetWork { class Member(val name: String) { val contacts = new ArrayBuffer[Member] } private val members = new ArrayBuffer[Member] def join(name: String) = { val m = new Member(name) members+=m m } } val beijing = new network val xian = new network val s1 = beijing.join("Bob") val s2 = beijing.join("Michael") // 同一种类型能够同一个集合 s1.conttacts +=s2 val s3 = xian.join("Alice") // 不能够将s3添加到s1中,由于不是同一个Network对象