目录

(1)object是什么

(2)scala 中 object 对象的应用

1.作为伴生对象: object

2.继承抽象类,重写抽象类中的方法

3.object 定义 特殊的 apply 方法

4.object 实现 scala 中的 main 方法

5.object 实现枚举值


(1)object是什么

含义:相当于class的单个实例
      object通常用于作为单例模式的实现,或者放class的静态成员,比如工具方法 
      
它的构造方法:
就是object内部不在method中的代码;

什么时候调用构造方法:
object的constructor只会在其第一次被调用时执行一次,以后再次调用就不会再次执行constructor了

例子: 
object Person {
  private var eyeNum = 2
  println("this Person object!")
  def getEyeNum = eyeNum
}

(2)scala 中 object 对象的应用

1.作为伴生对象: object

相当于把所有static 的属性,方法,代码块儿等进行了汇总

伴生类:同名的类
作用:互相访问 private

例子:

object Person {
  private val eyeNum = 2
  def getEyeNum = eyeNum
}

class Person(val name: String, val age: Int) {
  def sayHello = println("Hi, " + name + ", I guess you are " + age + " years old!" + ", and usually you must have " + Person.eyeNum + " eyes.")
}

//应用
val person = new Person("Tom",23)
person.sayHello

2.继承抽象类,重写抽象类中的方法

abstract class Hello(var message: String) {
  def sayHello(name: String): Unit
}

object HelloImpl extends Hello("hello") {
  override def sayHello(name: String) = {
    println(message + ", " + name)
  }
}

HelloImpl.sayHello("Tom")  //调用

3.object 定义 特殊的 apply 方法

简写的方式: 省略了 调用符号 “.” + 方法名称
当类的构造方法没有传参时,可以直接写类名称,来表示调用!!

class Person(val name: String)
object Person {
  def apply(name: String) = new Person(name)
}

val person = Person("Tom")

class Person()
object Person {
  def apply() = new Person()
}

val person = Person

作用:初始化时,更加简洁

4.object 实现 scala 中的 main 方法

原生方式:
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello World!!!")
  }
}

继承 App 
object HelloWorld extends App{
 if(args.length > 0 ) println("hello, " + args(0))
 else println("Hello World !!!")
}

scalac HelloWorld 
scala HelloWorld 
scala HelloWorld Tom

详解:App Trait 的工作原理:
App Trait继承自DelayedInit Trait,scalac命令进行编译时,会把继承App Trait的object的constructor代码都放到DelayedInit Trait的delayedInit方法中执行

5.object 实现枚举值

声明:
(1)object Season extends Enumeration {
  val SPRING, SUMMER, AUTUMN, WINTER = Value
}

(2)object Season extends Enumeration {
  val SPRING = Value(0, "spring")
  val SUMMER = Value(1, "summer")
  val AUTUMN = Value(2, "autumn")
  val WINTER = Value(3, "winter")
}

取值:

Season(0)
Season.withName("spring")

// 使用枚举object.values可以遍历枚举值
for (ele <- Season.values) println(ele)

汇总: 
scala 把java 中的一些特性进行了抽取,使之放在 同一的 object 类中实现

scala之object类相关推荐

  1. Scala中Object和Class区别(伴生类和伴生对象)

    文章目录 一,介绍 二,类Class 2.1 类定义 2.2 构造器 1.基本语法 2.构造器参数 2.3 私有成员和Getter/Setter语法 三,单例对象Object 四,伴生对象和伴生类介绍 ...

  2. Scala(三):类

    类:Class 1.简单类和无参方法 2.带getter和setter属性 3.只带getter属性 4.对象私有字段 5.Bean属性 6.辅助构造器 7.主构造器 8.嵌套类 1.简单类和无参方法 ...

  3. Scala系列-3、scala中的类和对象有哪些?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 目录 如何使用IDEA创建scala项目 创建普通的scala项目 ...

  4. Scala面向对象基础--类和对象

    一.类和对象介绍 在Scala里,类是用关键字"class"开头的代码定义,它是用于创建对象的蓝图.一个类就是一个类型,不同的类就是不同的类型,一个对象的类型就是创建它用的那个类. ...

  5. scala的mysql类封装_Scala入门:类

    [版权声明]博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! [返回Spark教程首页] 类和对象是Java.C++等面向对象编程的基础概念.类是用来创建对象的蓝图.定义好类以后,就可以使 ...

  6. JAVA-初步认识-第十一章-object类-equals方法覆盖

    一. 现在要谈论equals方法另一个方面.如果不写equals方法,直接用==来比较也是可以的,貌似equals方法有点多余. 现在不比较对象是否相等,而是比较对象中的特定内容,比如说对象的年龄,之 ...

  7. 【宋红康学习日记11】Object类与equals方法

    1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在St ...

  8. java异常类 Object类

    1.Object类 Object类是所有类的父类,是最顶层的父类. 当一个类没有直接继承其它父类时,这个类的直接父类就是Object类. class Person { ... } 等价于 class ...

  9. Scala类型系统——高级类类型(higher-kinded types)

    高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...

最新文章

  1. 利用nofllow与内页链接做好SEO
  2. 20211028 调节和跟踪
  3. 问题:c语言简单的循环和字符串,错在哪里了?结果怎么是0(已解决)
  4. 使用MyBatis框架时发现的一些小bug
  5. 程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)
  6. 关于 Vue.js:那些好的,不怎么样的和糟糕的
  7. java导出文件名乱码
  8. Kylo调研总结(一)
  9. javascript表单提交的内容显示在表格中
  10. 1034 Head of a Gang
  11. 剥opgw光缆工具_ADSS光缆开剥光缆常用方法及开剥注意点
  12. 计算机毕业设计SSM大学生校园社团管理系统【附源码数据库】
  13. 【自动化__持续集成】___java___构造方法
  14. windows 大文件共享传输错误 0X8007003B
  15. 数学知识——矩阵乘法
  16. 数字图像处理——基本运算
  17. python软件基金会在哪个国家举行_官宣!Python 开发者大会(PyCon US)提供在线订阅啦!...
  18. JS高级+ES678
  19. 信号加白噪声分贝matlab程序,数字信号处理 实验报告.doc
  20. 华为9x计算机在哪里,华为荣耀9xOTG设置在哪里

热门文章

  1. java1.832官网下载_jdk1.8 32位官方下载-JDK 1.832位 u66 官方版 - 河东下载站
  2. ios短信验证码自动填充两次,且输入框的值为空。
  3. 用digispark开发板制作Bad USB
  4. 迅为iTOP-RK3568开发板支持SATA/PCIE/USB3.0/集成双核GPU/独立NPU
  5. mysql 乱码 越南_记一次Unipack越南文乱码Bug的修复
  6. REST API认证的四种常用方法
  7. python小数的进制转换_Python实现的十进制小数与二进制小数相互转换功能
  8. Switf的基本语法
  9. 获取屏幕大小、获取底部虚拟按键高度
  10. 双碳目标路径/方案研究,气体排放核算方法(一)