Fork me on GitHub

Scala中的类学习

Scala中的类学习

从java了解类的情况下,了解Scala的类并不难。Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXXX与setXXX方法

  • 构造Scala的类
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)
  • 构造类setXXX与getXXX
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对象
posted @ 2018-09-10 13:54  codegeekgao  阅读(320)  评论(0编辑  收藏  举报