scala提供了一种特殊的定义单例的方法:object关键字

scala> object Shabi{
| val age = 0
| val name = "shabi"
| def say = {
| println("hello, I am a shabi")
| }
| }
defined object Shabi

scala> Shabi.say
hello, I am a shabi

object定义的单例可以类比于java中的静态元素,也类似于enum,可以直接import后调用。

正常定义类scala用的是class关键字,注意这里可以在类名的后天添加参数列表,表示主构造函数参数,而主构造函数主体就是类定义中除了类成员函数定义以外的部分:

package test.wangyalouclass Rational(n:Int, s:Int){require(s != 0)var num = nvar sub = soverride def toString() = num + "/" + subdef add(other:Rational) = {var subtotal = sub * other.subvar numtotal = sub * other.num + num * other.subval mintotal = subtotal min numtotal for(i <- 2 to mintotal){while (numtotal % i == 0 && subtotal % i == 0){subtotal /= inumtotal /= i}}new Rational(numtotal, subtotal)}val big = n / svar isFalse = falseisFalse = if(num > sub) true else falseval initmin = num min subfor (i <- 2 to initmin){while(num % i == 0 && sub % i == 0){num /= isub /= i}}
}

注意在上边的代码中,除了黄色和绿色的成员函数代码以及红色的成员变量声明代码外,其余代码均为构造函数代码。这里的require作用类似于java中的assert,即如果不满足条件就报错。

在scala中还有一种辅助构造函数,使用def this(){...},但是记住,所有辅助构造函数的第一句必须显式调用其他构造函数:

    def this(num:Int) = {this(num,1)}

因此无论调用哪个构造函数最终都一定会调用到主构造函数,这是与java很大的一点不同!而且只有主构造函数中才能调用基类构造函数!
scala的标识符包括:普遍意义的标识符、符号标识符,以及字面量标识符。

第一种不多说,需要注意的是$字符也被当作是字母,但是被保留作为 Scala 编译器产生的标识符之用。用户程序里的标识符不应该包含$字符,尽管能够编译通过;

第二种包括一些如 + , : , ? , ~ 或 #的可打印的ASCII字符。以下是一些操作符标识符的例子: + ++ ::: <?> :->,Scala 编译器将内部“粉碎”操作符标识符以转换成合法的内嵌’$’的 Java 标识符。例如, 标识符:->将被内部表达为 $colon$minus$greater 。 若你想从 Java 代码访问这个标识符,就应使用这个内部表达。

第三种也称为文本标识符,即反单引号包含的任意字符,这样的好处是可以将变量或方法命名为冲突的字符、保留字符或关键字,最典型的就是Thread类的`yield`方法,调用方式为Thread1.`yield`

和java一样,scala也支持方法的重载,根据方法参数的不同可以定义同一个方法的不同重载形式。例如定义Rational的整数add方法:

    def add(intnum:Int) = {add(new Rational(intnum,1)}

转载于:https://www.cnblogs.com/wangyalou/p/9563297.html

scala成长之路(2)对象和类相关推荐

  1. scala成长之路(1)基本语法和数据类型

    scala作为JVM上的Lisp,是一种geek类型的编程语言,也一直是我等java程序员眼中的梦寐以求的一门技能,遂下定决心花一段时间好好学习scala.第一天学习,主要介绍与java在编程上的主要 ...

  2. Scala学习之路 (六)Scala的类、对象、继承、特质

    一.类 1.类的定义 scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员 这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员 ...

  3. Scala学习之路之篇六(类与对象)

    Scala 类和对象 类是对象的抽象,而对象是类的具体实例. 类是抽象的,不占用内存,而对象是具体的,占用存储空间. Scala中的类不声明为public,一个Scala源文件中可以有多个类. 类定义 ...

  4. Scala基础教程(七):类和对象、特征

    扩展一个类: 可以扩展scala类以类似的方式,如在Java中的一样,但有两个限制:方法重载需要override关键字,只有主构造可以传递参数给基构造.现在扩展上面的类,并增加一个类的方法: clas ...

  5. scala的伴生类和伴生对象所属类是什么?

    文章目录 说在前面 运行原理 代码体现 解析 说在前面 scala是纯面向对象的语言,C是纯面向过程的语言,Java就是面向过程+面向对象的语言. 在说到伴生对象之前,要先说到java的static关 ...

  6. 2020 我的C++的学习之路 第十章 对象和类

    以C++ Primer Plus为参考书籍,自身归纳知识点,加深记忆. 对象和类 过程性编程与面向对象编程 对象和类 类 类声明 实现类成员函数 方法与对象 类的构造函数与析构函数 声明和定义构造函数 ...

  7. 【JAVA修行之路】--“斩杀”对象和类

    文章目录 对象和类 理解对象 对象的属性和方法 封装 类 理解 类 类的属性 类的方法 对象和类的区别 关系 类是对象的类型 JAVA的类模板 如何定义类 定义类名 编写类的属性 编写类的方法 创建和 ...

  8. JAVA程序员成长之路的总结

    JAVA程序员成长之路的总结 看了篇推荐贴,JAVA程序员成长之路的总结,大致适用于各种初级JAVA程序员规划借鉴之用, 原文地址http://tieba.baidu.com/p/2017010306 ...

  9. Scala进阶之路-面向对象编程之类的成员详解

    Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...

最新文章

  1. 中科大计算机专硕英语,211科班一战394上岸中科大软院专硕2021
  2. python语法书籍推荐_python语法的书
  3. 程序猿生存指南-35 王旭新巢
  4. ssh客户端_Mobaxterm-不止是一款好用的SSH客户端软件
  5. 我才是世界上最好的编程语言
  6. C# 调用人脸识别 虹软ArcFace2.0实例
  7. 2020年蓝桥杯比赛时间_我院举办2021年创新创业大赛启动仪式及第12届蓝桥杯动员大会...
  8. Java中数据类型转换大全(个人总结)
  9. STM32L562开发板开箱记 STM32L562E-DK Discovery kit电路功能分析
  10. 怎样为Mac视频添加音频
  11. javaScript常见的五种数组去重(转载)
  12. 【问题3】生产环境中的 redis 是怎么部署的?
  13. 嵌入式linux全套教学视频(国嵌版)
  14. 硬盘分区的类型:mbr分区和gpt分区的区别
  15. EXCEL复合条饼图制作
  16. 自学编程有哪些困难和障碍?
  17. Python读写xlsx文件
  18. Python“Non-ASCII character 'xe5' in file”报错问题
  19. 编译LineageOS
  20. win10怎么打开网络计算机,Win10怎么启用网络发现?

热门文章

  1. Optional java 用法_Java8 Optional 的正确使用方式
  2. Java程序员必备!Redis面试复习大纲在手面试不慌
  3. 十分钟就能回顾Spring常问的知识点,带你突击面试没问题!
  4. Android移动开发之【Android实战项目】记一次app开发过程!
  5. 归并排序执行次数_归并排序过程、时间复杂度分析及改进
  6. java冒泡函数解释,JS DOM操作 函数 事件 阻止事件冒泡
  7. 尚硅谷springcloud第二季笔记_外行人都能看懂的 Spring Cloud,错过了血亏
  8. php能做定时关机吗,浅谈系统的定时关机
  9. 优质的网站结构能给SEO优化带来哪些好处?
  10. 网络推广外包专员浅析为什么说企业网站都需要网络推广外包?