zoukankan      html  css  js  c++  java
  • scala学习之类和对象

    scala中的类和java中有些不同,嗯更加简洁一些,习惯了java bean的写法,对于scala还是不太适应的,虽然说一堆 getter、setter方法确实很臃肿,但是使用IDE生成似乎也不费劲...
    
      class Person {
    
      private  var age  = 0  //声明私有变量
    
      var birthday = new Date()
    
      var name = ""
    
      private [this] var secret = ""  //访问限制,只有类方法可以访问
                                        //对象私有属性,不会生成setter和getter方法
    
      def increment(){ age += 1}
    
      def current() = age
    
      def keepSecret(): Unit ={
        secret = "this is my secret";secret
      }
      //和java一样,如果每一天显式定义主构造方法,会自动用于一个无参构造方法
      def this(name: String){  //辅助构造方法
        this()  //调用主构造方法
        this.name = name
      }
    
      def this(age:Int , name: String){
        this(name)   //调用辅助构造方法
        this.age = age
      }
    }  

    对于构造方法,scala有自己的一套,直接写在类定义中,嗯,看上去不错,但是我不习惯

    /**
     * 主构造方法 定义在类上
     * @param name
     */
    class People (val name : String){
        var  age = 0
        def description = name + "is" + age +"years old"
    
    }
    

    对象: 在scala中没有静态方法或者字段,但是可以使用object来达到同样的目的,可以像java中静态方法一样使用:类.方法,除此之外,scala中又多出来伴生对象,也是利用object关键字来做的,且看代码

    /**
     * 伴生对象
     */
    class Account {
    
      val id = Account.newUniqueNumber
      private var balance = 0.0
      def deposit(amount:Double){balance += balance}
    }
    object Account{
      private var lastNumber = 0;
      private def newUniqueNumber = {lastNumber+=1;lastNumber}
    }

    类和它的伴生对象可以相互访问私有对象,但是必须存在于同一个源文件中。

    枚举
    scala中没有枚举,但是可以通过继承 Enumeration来实现

    object TrafficLight extends Enumeration{
    
      val RED = Value(0,"Stop")
      val YELLOW = Value(1,"wait")
      val GREEN = Value(2,"Go")
    
    }

    使用如下

      TrafficLight.GREEN
      TrafficLight(0)
      TrafficLight.withName("Stop")

    注意:枚举的类型是TrafficLight.Value,而不是TrafficLight

    用放荡不羁的心态过随遇而安的生活
  • 相关阅读:
    java web项目防止多用户重复登录解决方案
    java提高篇(二一)-----ArrayList
    转:为什么需要htons(), ntohl(), ntohs(),htons() 函数
    转:对于linux下system()函数的深度理解(整理)
    转:sprintf与snprintf
    转: fscanf()函数详解
    转:fopen()函数
    转:struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
    转:BZERO()等的区别
    转:Linux内存管理之mmap详解
  • 原文地址:https://www.cnblogs.com/re-myself/p/5532485.html
Copyright © 2011-2022 走看看