伴生对象

在Java中,经常会有一些类,同时有实例成员又有静态成员。例如:

public class CustomerService {private static String SERVICE_NAME = "CustomerService";public void save() {// 保存客户System.out.println(SERVICE_NAME + ":保存客户");}public static void main(String[] args) {new CustomerService().save();}
}

在scala中,要实现类似的效果,可以使用伴生对象来实现。

我们还可以使用伴生对象来实现快速创建对象,例如:

// 无需使用new就可以快速来创建对象
val a = Array(1,2,3)
val b = Set(1,2,3)

定义伴生对象

一个class和object具有同样的名字。这个object称为伴生对象,这个class称为伴生类

  • 伴生对象必须要和伴生类一样的名字
  • 伴生对象和伴生类在同一个scala源文件中
  • 伴生对象和伴生类可以互相访问private属性

示例

示例说明

  • 编写一个CustomerService类,有一个save方法,打印

    服务类名称:保存客户
    
  • 编写一个CustomerService伴生对象,定义一个私有变量,用于保存服务类名称

  • 创建CustomerService对象,调用save方法

参考代码

object _11ObjectDemo {class CustomerService {def save() = {println(s"${CustomerService.SERVICE_NAME}:保存客户")}}// CustomerService的伴生对象object CustomerService {private val SERVICE_NAME = "CustomerService"}def main(args: Array[String]): Unit = {val customerService = new CustomerService()customerService.save()}
}

private[this]访问权限

如果某个成员的权限设置为private[this],表示只能在当前类中访问。伴生对象也不可以访问

示例

示例说明

  • 定义一个Person类,包含一个name字段
  • 定义Person类的伴生对象,定义printPerson方法
  • 测试伴生对象是否能访问private[this]权限的成员

示例代码

  class Person(private[this] var name:String)object Person {def printPerson(person:Person): Unit = {println(person.name)}}def main(args: Array[String]): Unit = {val person = new Person("张三")Person.printPerson(person)}

上述代码,会编译报错。但移除掉[this]就可以访问了

Scala进阶_伴生对象相关推荐

  1. 好程序员大数据学习路线分享scala单列和伴生对象

    好程序员大数据学习路线分享scala单列和伴生对象 scala单例 object SingletonDemo { def main(args: Array[String]): Unit = { val ...

  2. scala中的伴生对象,

    package bms_entity.data/**** @Date 2021/8/23 11:12* scala中的伴生对象,* scala中把同一个源文件中相同名称的object结构称之为clas ...

  3. Scala编程之伴生对象

    伴生对象是scala中静态的概念 Scala语言是完全面向对象(万物皆对象)的语言,所以并没有静态的操作(即在 Scala中没有静态的概念).但是为了能够和Java语言交互(因为Java中有静态概念) ...

  4. Scala进阶_函数式编程(过滤丶排序丶分组丶聚合)

    过滤 | filter 过滤符合一定条件的元素 定义 方法签名 def filter(p: (A) ⇒ Boolean): TraversableOnce[A] 方法解析 filter方法 API 说 ...

  5. 四, Scala 伴生对象, 特质

    文章目录 四, Scala 伴生对象和伴生类 4.1 单例对象和伴生对象 4.1.1 什么是单例对象? 4.1.2 如何使用Scala的伴生对象和伴生类来实现单例模式? 4.1.2 apply方法 4 ...

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

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

  7. scala快速入门系列【伴生对象】

    本篇作为scala快速入门系列的第二十篇博客,为大家带来的是关于伴生对象的内容. 文章目录 伴生对象 定义伴生对象 private [this] 访问权限 apply 方法 伴生对象 在Java中,经 ...

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

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

  9. 大数据编程语言 Scala 进阶篇

    作者:幻好 来源: 恒生LIGHT云社区 Scala 系列: 2小时速学大数据编程语言 Scala 秘籍 大数据编程语言 Scala 进阶篇 前言 为了能够深入学习大数据框架 Spark 和 Fink ...

最新文章

  1. android phone驱动_一文带你掌握 Android 系统架构
  2. Mex文件在VS2010中调试方法
  3. 【转】Java MySQL数据类型对照
  4. 利用python实现批量查询ip地址归属地址
  5. CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
  6. 深度linux不能联网,Deepin Linux 无法上网
  7. 一、公安备案与经营性备案
  8. ubuntu下Xmodmap映射Esc和Ctrl_L
  9. 在线网上书店管理系统
  10. Otsu阈值分割详解
  11. c++ 制作蠕虫病毒
  12. 金士顿u盘写保护修复教程
  13. Metasploit2: tcp port 139/445 – Samba smbd
  14. laravel异常前后端独立返回 阿星小栈
  15. 如何安装一个虚拟机?(简单15步,安装VMware16.1.1详细教程)
  16. 心灵鸡汤1------让人奋进的五句话
  17. python对文本文件的读写
  18. python 报错'tuple' object does not support item assignment
  19. 改版后的PMP值得考吗?
  20. 这些年,被“颠覆性创新”的五大行业

热门文章

  1. Neural Network Intelligence (NNI) | PyTorch-CiFar10 项目示例+常用pytorch版本模型全家福
  2. hdu 6386 Age of Moyu (求最短路 优先队列)
  3. vim配置python3开发环境
  4. 数据挖掘中常用的数据清洗方法
  5. Zipline入门教程
  6. GetMapping无法解析
  7. 方正科技服务器可以重装系统吗,远程可以重装系统吗|如何远程重装系统
  8. js中的设计模式之组合模式
  9. Resnet 50 残差网络
  10. keras实现resnet50