scala之object类
目录
(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类相关推荐
- Scala中Object和Class区别(伴生类和伴生对象)
文章目录 一,介绍 二,类Class 2.1 类定义 2.2 构造器 1.基本语法 2.构造器参数 2.3 私有成员和Getter/Setter语法 三,单例对象Object 四,伴生对象和伴生类介绍 ...
- Scala(三):类
类:Class 1.简单类和无参方法 2.带getter和setter属性 3.只带getter属性 4.对象私有字段 5.Bean属性 6.辅助构造器 7.主构造器 8.嵌套类 1.简单类和无参方法 ...
- Scala系列-3、scala中的类和对象有哪些?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 目录 如何使用IDEA创建scala项目 创建普通的scala项目 ...
- Scala面向对象基础--类和对象
一.类和对象介绍 在Scala里,类是用关键字"class"开头的代码定义,它是用于创建对象的蓝图.一个类就是一个类型,不同的类就是不同的类型,一个对象的类型就是创建它用的那个类. ...
- scala的mysql类封装_Scala入门:类
[版权声明]博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! [返回Spark教程首页] 类和对象是Java.C++等面向对象编程的基础概念.类是用来创建对象的蓝图.定义好类以后,就可以使 ...
- JAVA-初步认识-第十一章-object类-equals方法覆盖
一. 现在要谈论equals方法另一个方面.如果不写equals方法,直接用==来比较也是可以的,貌似equals方法有点多余. 现在不比较对象是否相等,而是比较对象中的特定内容,比如说对象的年龄,之 ...
- 【宋红康学习日记11】Object类与equals方法
1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在St ...
- java异常类 Object类
1.Object类 Object类是所有类的父类,是最顶层的父类. 当一个类没有直接继承其它父类时,这个类的直接父类就是Object类. class Person { ... } 等价于 class ...
- Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...
最新文章
- 利用nofllow与内页链接做好SEO
- 20211028 调节和跟踪
- 问题:c语言简单的循环和字符串,错在哪里了?结果怎么是0(已解决)
- 使用MyBatis框架时发现的一些小bug
- 程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)
- 关于 Vue.js:那些好的,不怎么样的和糟糕的
- java导出文件名乱码
- Kylo调研总结(一)
- javascript表单提交的内容显示在表格中
- 1034 Head of a Gang
- 剥opgw光缆工具_ADSS光缆开剥光缆常用方法及开剥注意点
- 计算机毕业设计SSM大学生校园社团管理系统【附源码数据库】
- 【自动化__持续集成】___java___构造方法
- windows 大文件共享传输错误 0X8007003B
- 数学知识——矩阵乘法
- 数字图像处理——基本运算
- python软件基金会在哪个国家举行_官宣!Python 开发者大会(PyCon US)提供在线订阅啦!...
- JS高级+ES678
- 信号加白噪声分贝matlab程序,数字信号处理 实验报告.doc
- 华为9x计算机在哪里,华为荣耀9xOTG设置在哪里
热门文章
- java1.832官网下载_jdk1.8 32位官方下载-JDK 1.832位 u66 官方版 - 河东下载站
- ios短信验证码自动填充两次,且输入框的值为空。
- 用digispark开发板制作Bad USB
- 迅为iTOP-RK3568开发板支持SATA/PCIE/USB3.0/集成双核GPU/独立NPU
- mysql 乱码 越南_记一次Unipack越南文乱码Bug的修复
- REST API认证的四种常用方法
- python小数的进制转换_Python实现的十进制小数与二进制小数相互转换功能
- Switf的基本语法
- 获取屏幕大小、获取底部虚拟按键高度
- 双碳目标路径/方案研究,气体排放核算方法(一)