Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Scala-12.对象(object)

Scala-12.对象(object)

作者头像
悠扬前奏
发布于 2019-07-15 04:54:58
发布于 2019-07-15 04:54:58
62400
代码可运行
举报
运行总次数:0
代码可运行
  • object在Scala中是一个关键词,同时对象也是一个概念,即类的一个实例
  • asInstanceOf方法可以将一个实例强制转换为另一个期望的类型。
  • 用scala的classOf方法来代替Java的.class。可以得到对象所属的类
  • 创建启动入口有两种方式,其实两种方法都是从object启动而不是class:
    • 继承App特质的object:
      • 该特质使用DelayedInit功能实现,也就是object的字段在main方法执行前都没有被初始化
      • 一般不需要覆盖main方法:其目的是将整个类编程main方法。除非是确实有意为之,选择去覆盖
    • 定义一个object,实现main方法
  • 用object关键字创建的对象是Singleton的,对象的方法定义在obejct而不是类中,可以像Java中调用静态方法
  • 可以在类中定义非静态的实例成员,然后在同一个文件中再定义一个类相同名字的“静态”成员对象。这个对象被称为伴生类。
    • 和Java静态类的区别在于:
      • 在同一文件中定义对象和类,并赋予相同的名字
      • 在对象内定义“静态”成员
      • 在类内定义非静态成员
    • 类和其伴生类可以互相访问对方的私有成员变量。
  • 将要在所有类中共享的代码放在一个包的包对象中,可以在不引入类或者对象的前提下,让函数、字段和其他代码在包级别可用。
  • 通过以下两种办法可以不用new关键字创建类的实例,使代码更简洁:
    • 为类创建半生类,并在伴生类内按照所需的构造函数签名定义一个apply方法。
      • 本质上是类的构造函数:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person {
    var name: String = _
}

object Person {
    def apply(name: String): Person = {
        val p = new Person
        p.name = name
        p
    }
}
  • 将类定义为case类,本质上还是在应为case类为伴生类中生成了一个apply方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case class Person(var name:String)
  • 如果需要为在通过apply方法创建多个构造函数,可以在提供构造函数签名的伴生类中定义多个apply方法。
  • case被创建时同事会为默认构造函数实现访问器(选择生成)和取值器(这回产生很多隐藏的代码膨胀)
  • 通过apply方法可以在Scala中实现工厂方法。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
使用object 单例对象名定义一个单例对象,可以用object作为工具类或者存放常量
Lansonli
2021/10/11
4290
02.Scala:面向对象、Object、抽象类、内部类、特质Trait
scala是支持面向对象的,也有类和对象的概念。我们依然可以基于scala语言来开发面向对象的应用程序。
Maynor
2021/04/09
1.2K0
Spark基础-scala学习(二、面向对象)
面向对象编程之类 //定义一个简单的类 scala> :paste // Entering paste mode (ctrl-D to finish) //类默认public的 class HelloWorld{ private var name = "leo" def sayHello(){print("Hello,"+name)} def getName = name } // Exiting paste mode, now interpreting. defined class Hel
老梁
2019/09/10
6790
Scala 基础 (六):面向对象(下篇)
在之前的文章中总结了Scala面向对象模块基础的内容,接下来学习面向对象的高阶内容。
百思不得小赵
2022/12/01
4940
Scala 基础 (六):面向对象(下篇)
Scala 【 7 object 】
object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method 。
Lokinli
2023/03/09
2510
带你快速掌握Scala操作———(4)
文章目录: 1、iterator迭代器 使用迭代器遍历集合 2、类和对象 创建类和对象 定义和访问成员变量 3、使用下划线初始化成员变量 4、定义成员方法 5、访问修饰符 6、类的构造器 主构造器 辅助构造器 7、单例对象 定义单例对象 8、工具类案例 9、main方法 10、伴生对象 private[this]访问权限 11、继承 示例 | 类继承 示例 | 单例对象继承 12、override和super 1、iterator迭代器 scala
刘浩的BigDataPath
2021/04/13
7090
带你快速掌握Scala操作———(4)
Scala最基础入门教程
(1)Scala和Java一样属于JVM语言,使用时都需要先编译为class字节码文件,并且Scala能够直接调用Java的类库。
ha_lydms
2023/09/29
7040
Scala最基础入门教程
scala快速入门系列【单例对象】
本篇作为scala快速入门系列的第十九篇博客,为大家带来的是关于单例对象的内容。
大数据梦想家
2021/01/26
4120
scala快速入门系列【单例对象】
Scala 学习之面向对象(3)
        ---> 伴生类和伴生对象    object 相当于 Java 中的 static
py3study
2020/01/07
3300
带你快速掌握Scala操作———(5)
类继承了多个trait后,可以依次调用多个trait中的同一个方法,只要让多个trait中的同一个方法在最后都依次执行super关键字即可。类中调用多个tait中都有这个方法时,首先会从最右边的trait方法开始执行,然后依次往左执行,形成一个调用链条。
刘浩的BigDataPath
2021/04/13
5390
带你快速掌握Scala操作———(5)
Scala专题系列(五):类与对象
println(p.age) // 在调用无参方法时,圆括号可以不写 一般对于修改值得方法加上圆括号,对于取值的方法可以不写圆括号
用户5252199
2022/04/18
5770
2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)
1. trait 中可以有 抽象的 也可以有 具体的 2. 一个类可以实现多个trait(通过with关键字) 3. 单个对象也可以附件多个trait 4. trait本身也可以继承其它class 通过这3个特性,我们可以体现出来。trait是一种 代码复用的最小单元 我们可以将想要的特性功能封装到trait中 不管是让class去附加 还是单个对象去附加 都OK 同时附加的数量不受到影响。
Lansonli
2021/10/11
3780
scala快速入门系列【特质】
本篇作为scala快速入门系列的第二十六篇博客,为大家带来的是关于特质(trait)的内容。
大数据梦想家
2021/01/26
4950
scala快速入门系列【特质】
大数据技术之_16_Scala学习_05_面向对象编程-中级
1、scala 进行 package 打包时,可以有如下形式。【案例演示+反编译查看】
黑泽君
2019/04/01
1.3K0
大数据技术之_16_Scala学习_05_面向对象编程-中级
Scala学习二-面向对象
适用于var变量,对于val不适用,注意如果使用下划线进行初始化,此时必须提供数据类型,这样就可以进行自动推断赋初始值
路行的亚洲
2020/10/26
8930
学好Spark必须要掌握的Scala技术点
Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作。
大数据学习与分享
2020/08/10
1.6K0
学好Spark必须要掌握的Scala技术点
Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
1:Scala之函数式编程学习笔记: 1:Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法: class User { private var name = "张三"; def hello(): Unit ={ println("hello : " + name) } //注:如果定义方法
别先生
2018/04/02
1.1K0
Scala入门系列终章:类与对象
截至本篇,Scala入门系列即将告一段落,先后用7篇文章将Scala语言的四梁八柱进行了简要介绍,虽然阅读量相较于其他文章更为惨淡,但相信对于有一定编程语言基础又想快速入门Scala的读者来说还是会有一定收获和借鉴的。
luanhz
2021/03/04
5100
Scala入门系列终章:类与对象
scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
一、主从构造器 java中构造函数没有主、从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person { var name: String = _ /** * 从构造器 * @param name */ def this(name: String) = { this //注意:从构造器,必须先调用主构造器 this.name = name; } ove
菩提树下的杨过
2018/01/18
9300
Scala 学习笔记之Object
Scala没有静态方法或静态字段,可以使用 object 来达到这个目的,对象定义了某个类的单个实例:
smartsi
2019/08/07
4920
推荐阅读
相关推荐
2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验