当前位置: 首页 > news >正文

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

转载于:https://www.cnblogs.com/re-myself/p/5532485.html

相关文章:

  • 志于道,志之所趋,无远弗届
  • LeetCode Divide Two Integers
  • iOS学习路线图
  • 阿里内推面试
  • ajax和json详解
  • ip地址合法性
  • Appium 的安装启动
  • thinkphp框架中处理标签中条件输出
  • CSS3实现图片循环旋转
  • TCP/IP详解 卷一(第十四章 DNS:域名系统)
  • Java连接Oracle数据库
  • JN5139 zigbee 资料
  • 洛谷1219 八皇后 解题报告
  • js获取url请求参数
  • poj 1840 Eqs
  • [译] 怎样写一个基础的编译器
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 07.Android之多媒体问题
  • JDK 6和JDK 7中的substring()方法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • laravel5.5 视图共享数据
  • mysql innodb 索引使用指南
  • Mysql数据库的条件查询语句
  • php的插入排序,通过双层for循环
  • python学习笔记-类对象的信息
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Spark RDD学习: aggregate函数
  • TypeScript迭代器
  • vue自定义指令实现v-tap插件
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 半理解系列--Promise的进化史
  • 闭包--闭包之tab栏切换(四)
  • 动态魔术使用DBMS_SQL
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 我看到的前端
  • 以太坊客户端Geth命令参数详解
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !!Dom4j 学习笔记
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (12)目标检测_SSD基于pytorch搭建代码
  • (14)Hive调优——合并小文件
  • (2)MFC+openGL单文档框架glFrame
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (三十五)大数据实战——Superset可视化平台搭建
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一) springboot详细介绍
  • (转)甲方乙方——赵民谈找工作
  • ***通过什么方式***网吧
  • .bashrc在哪里,alias妙用