Scala中对象介绍

Scala【使用篇】04:Scala面向对象 阅读详情

 

单例对象

Scala没有静态方法或静态字段,你可以用object这个语法结构来达到同样的目的。对象定义了某个类的单个实例,包含了你想要的特性。例如:

object Accounts {
  private var lastNumber = 0

  def newUniqueNumber = {
    lastNumber += 1
    lastNumber
  }
}

 

对象的构造器在对象第一次使用时被调用。在上面例子中,Accounts的构造器在Accounts.newUniqueNumber的首次调用时执行。如果一个对象从未被使用,那么其构造器也不会被执行。

对象本质上可以拥有类的所有特性,他甚至可以扩展其他类或特质。(只有一个例外,你不能提供构造器参数)

 

伴生对象

在Java或C++中,你通常会用到既有实例方法又有静态方法的类。在Scala中,你可以通过类和类同名的伴生对象来达到同样的目的。例如:

// 只有object 和class 名字一样时才称为伴生对象
class Accounts {
  private var lastNumber = 0

  def newUniqueNumber = {
    lastNumber += 1
    lastNumber
  }

}

 

类和他的伴生对象可以相互访问私有的特性,并且他们必须存在同一个源文件中。

 

注意:类的伴生对象可以被访问,但并不在作用域中。举例来说,Account类必须通过Account.newUniqueNumber而不是直接调用newUniqueNumber来调用伴生对象的类。

 

扩展类或特质的对象

一个object可以扩展类以及一个或多个特质。其结果是一个扩展了指定类以及特质的类的对象,同时拥有在对象中定义给出的所有特性。

举例来说我们可以创建一个抽象类,然后来创建一个类来继承抽象类:

abstract class UndoableAction {
  def undo = {
  }

  def redo = {
  }
}

object DoNothingAction extends UndoableAction {
  override def undo: Unit =println("undo")
  override def redo: Unit = println("redo")
}
//DoNothingAction 可以被所有需要这个行为的地方共用

 

apply方法

我们通常会定义和使用对象的apply方法。当遇到以下情况时,apply方法就会被调用:

// Array对象定义了apply方法,我们可以直接使用下面的表达式来创建数组
Array("jason","jack","mark")

 

Array(100) 和 new Array(100) 很容易搞混。前一个表达式调用的是apply(100),输出一个单元素(整数100)的Array[Int]。后一个表达式调用的是构造器this(100),结果是Array[Nothing],包含了100个null元素。

 

应用程序对象

 

每个Scala程序都必须从一个对象的main方法开始,这个方法的类型为Array[String] => Unit

object Accounts {
  def main(args: Array[String]): Unit = {
    println("hello world")
  }
}

 

除了每次都提供自己的main方法之外,也可以扩展App特质,将程序代码直接写在构造器方法体内。

 

object Accounts extends App {
  println("hello world")
}

 

枚举

与Java或C++不同,Scala并没有枚举类型。不过标准类库提供了一个Enumeration类,可以用于产生枚举。

定义一个扩展Enumeration类的对象并以value方法调用初始化枚举中的所有可选值。例如:

object TrafficLightColor extends Enumeration {
  // 定义一个类型别名
  // 枚举的类型就变成了 TrafficLightColor.TrafficLightColor
  type TrafficLightColor = Value
  // 定义三个字段,然后用Value调用将他们初始化
  val RED,YELLOW,GREEN = Value
}



def doWhat(color: TrafficLightColor): Unit = {
  if (color == RED) {
    println("stop")
  } else {
    println("go")
  }
}

 

 

长按识别图中二维码

关注获取更多

 

 

Scala(6) -- scala类(成员变量、成员方法、修饰符)和对象 1. 类和对象 2. 定义和访问成员变量 3. 下划线初始化成员变量 4. 定义和访问成员变量 5. 访问权限修饰符 6. 类的构造器 7. 单例对象 8. main方法 9. 伴生对象 10. 案例 阅读详情

相关推荐

龙芯3A5000开发板PMON升级UEFI固件实战指南

固件是计算机硬件与操作系统之间的关键桥梁,负责初始化硬件并引导系统启动。其工作原理是在上电后执行自检、加载引导程序,最终将控制权移交操作系统。在国产化平台中,采用标准化的UEFI固件具有重要技术价值,它能提供图形化配置界面、统一硬件驱动模型,并支持安全启动等现代特性,从而显著提升硬件兼容性与系统管理效率。这一技术广泛应用于PC、服务器及嵌入式设备,尤其在需要运行银河麒麟等主流操作系统的龙芯开发板场景中,将传统PMON固件升级至UEFI,能实现更流畅的系统安装与更稳定的运行体验。本文基于固件升级与UEFI引导

weixin_42664597的博客 561

scala-类与对象

scala定义类: class Counter{ private var value = 0 //你必须初始化字段 def increment(){ value += 1}//方法默认是公有的 } 类有一个主构器和任意多的辅助构造器,类如果没有显示定义一个主构造器则自动拥有一个无参的主构造器; 辅助构造器的名称为this,每一个辅助构造器都必须以一个先前定义的其它辅助构造器或主构造器调用

cm_chenmin的专栏 511

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现

weixin_51693702的博客 1万+

Scala:函数式对象的定义及其使用

在 Scala 中,类(class)的定义比 Java 面相对象的类定义要简洁一些,因为 Scala 在类定义时就同时定义了该类的主构造器(primary constructor)。我们知道,构造函数只不过是一种特殊的函数(或称为方法)而已,所以 Scala 中的类定义个人觉得跟方法、函数定义的格式看起来差不多。 所谓的函数式对象,其实就是指对象内部没有可变的状态,即...

weixin_34082695的博客 218

GLDAS数据高效处理指南:基于Matlab的NC4转GeoTIFF实战解析

本文提供了一份基于Matlab的GLDAS数据处理实战指南,详细解析了如何将NetCDF4格式的GLDAS数据高效、准确地批量转换为GIS友好的GeoTIFF格式。文章核心内容包括数据理解、环境搭建、核心代码逐步拆解、效率提升技巧以及常见避坑方案,旨在帮助全球生态、水文与气候领域的研究者打通数据预处理的关键环节,提升科研工作效率。

weixin_29094775的博客 310

麒麟V10(arm)配置本地离线yum源

麒麟V10(arm)配置本地离线yum源

myfm2java的博客 7885

Scala中的类和对象:定义、创建和使用

在Scala中,我们使用class关键字来定义类,并使用new关键字来创建类的对象。nameage上述代码中,我们定义了一个名为Personname和age。greet方法用于打印出一个问候语,其中包含了对象的name和age属性。然后,我们使用new关键字创建了一个Person对象,并将其赋值给person变量。最后,我们调用person对象的greet方法来打印问候语。在上述代码中,我们创建了一个名为Person的类,并传递了两个参数name和age。然后,我们创建了一个名为person的。

jakelihua 1108

《Ventoy 制作系统安装 U 盘的具体步骤》

然后您可以在电脑的磁盘管理中对 U 盘进行快速格式化,选择 FAT32 或 NTFS 文件系统。至此,Ventoy 系统安装 U 盘就制作完成了。您可以在需要安装系统的电脑上,从 U 盘启动,然后选择相应的系统镜像进行安装。安装完成后,将您需要的操作系统镜像文件(如 Windows、Linux 等的 ISO 格式镜像)复制到 U 盘的根目录。在安装程序中,选择您插入的 U 盘设备,确保选择正确,以免误操作。2. 确认选择的 U 盘盘符正确,防止误操作导致其他磁盘数据丢失。点击“安装”按钮,等待安装完成。

jiyiwangluokeji的博客 2666

Scala之对象

本章的要点: 用对象作为单例或存放工具方法 类可以拥有一个同名的伴生对象 对象可以扩展类或特质 对象的apply方法通常用来构造伴生类的新实例 如果不想显式定义main方法,可以用扩展App特质的对象 你可以通过扩展Enumeration对象来实现枚举 一、单列对象 在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的 存放工具方法和常量 高...

lixinkuan的博客 706

AI+医疗:多模态模型让肺结节诊断准确率突破95%+的实战方案

多模态融合是必由之路:单一影像模型难以突破95%准确率,必须整合临床、生物标志物等多维数据跨模态注意力机制是核心:简单拼接效果差,注意力机制能自动学习各模态权重,提升融合效果临床适配比技术先进更重要:模型输出必须符合医生诊断习惯,提供可解释的决策依据持续学习是长期成功的关键:医疗数据分布不断变化,模型必须具备自适应能力多学科协作是保障:放射科、胸外科、病理科、AI工程师共同参与模型设计与优化。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1022

实战:RK3568 Android14 调试 MIPI DSI 液晶屏

LCD1_RST -> 对应原理图网络连接到 GPIO。LCD1_PWR_EN ->用于给屏幕 VCC 供电。LCD0_BL_EN / LCD0_BL_PWM -> MP3302 升压芯片驱动 LED 灯条。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/100f2be7f763494da1032464e272e63b.png&pinctrl {/* 配置 LCD_RST 和 LCD_EN */

qq_33427070的博客 1548

【Scala】之 处理对象

文章目录Scala 处理对象(1)类与构造器(2)遵循 JavaBean 惯例 (3)类型别名(4)参数化类型(5)单例对象(6)伴生对象(6)包对象 Scala 处理对象 (1)类与构造器 // Car.java public class Car { private final int year; private int miles; public Car(i...

fanfan4569的博客 461

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Scala伴生对象

基本结束 package chapter8 class ScalaPerson { var name:String = _ } object ScalaPerson { var sex:Boolean = true def sayHi():Unit = { println("object scala sayHi") } } package chapter8 o...

曾经蜡笔没有小新 2243

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Scala 类和对象

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

Hua_TZ的博客 1399

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Scala 类和对象

本章将介绍如何在Scala编程中使用类和对象。类是对象的蓝图(或叫模板)。定义一个类后,可以使用关键字new来创建一个类的对象。 通过对象可以使用定义的类的所有功能。 下面的图通过一个包含成员变量(name 和 rollNo)和成员方法(setName()和setRollNo())的Student类的例子来演示类和对象。最后都是类的成员。类是一个模板的东西,而对象是真实存在的。 在下图中,Stu...

Simple 专栏 1574

Scala学习02——Scala类和对象

Scala快速入门(适合为学Spark学习Scala的同学) 目录 一、数据类型 二、变量和常量的声明 三、类和对象 一、数据类型 Scala数据类型,首字母大写 Any是所有类型的超类,其父类为Object,AnyRef与AnyVal为Any类型的子类 Nothing类型表示不赋类型时,系统默认的类型,无实例值,为所有类型的子类 二、变量和常量的声明 常量赋值:val 变量赋值:var 定义变量/常量时,也可以写上指定类型,一般Scala可以自动识别,因此省略,如:v

Lynqwest的博客 942

Scala 对象

摘自《快学Scala》第六章0.重点需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,就会用到object。 * 用对象作为单例或存放工具方法 * 类可以拥有一个同名的伴生对象 * 对象可以扩展类或特质 * 对象的apply方法通常用来构造伴生类的新实例 * 如果不想显式定义main方法,可以用扩展App特质的对象 * 可以通过扩展Enumeration对象来实现枚举1

power0405hf的专栏 725

scala的类与对象

一、类的定义 //在Scala中,类并不用声明为public。 //Scala源文件中可以包含多个类,所有这些类都具有公有可见性。 class Person { //用val修饰的变量是只读属性,有getter但没有setter //(相当与Java中用final修饰的变量) val id = "9527" //用var修饰的变量既有getter又有setter var a

vinsuan93的专栏 1370

Scala 单例对象

单例对象:类是指用class定义的scala 对象, 如果用object替换class关键字, 那么这个就叫单例对象,sigleton object。 很难理解,下面使用三种使用校验和的方式来解释大家的疑问。

zlcd1988的专栏 1605

scala 类中的对象是类_Scala类和对象– Singleton对象,伴侣类

scala 类中的对象是类Earlier we learned about Scala Programming Language and it’s installation on Windows and *nix systems. Scala is an object oriented functional programming language, so today we will look i...

从零开始的教程世界 325

Scala单例对象、伴生类以及伴生对象、apply介绍

Scala单例对象、伴生类以及伴生对象、Scala apply介绍。

残缺的孤独 1万+

scala 类及对象

scala 面向对象特性,封装、继承、多态,抽象类,伴生对象,trait ,枚举类和应用类

weixin_42529756的博客 810

【Scala】类和对象的介绍与使用

目录 类和对象 创建类和对象 定义和访问成员变量 使用下划线初始化成员变量 定义成员方法 访问修饰符 类的构造器 主构造器 辅助构造器 单例对象 在单例对象中定义成员方法 main方法 实现App Trait来定义入口 伴生对象 private[this]访问权限 继承 override和super 类型判断 isInstanceOf/asInstanceOf getClass/classOf 抽象类 匿名内部类 特质(trait) 继承单个特质 继承多个特

qq_41369191的博客 797

Scala类和对象

scala

qq_57026298的博客 1121

Scala 之伴生对象总结

Scala 中伴生对象采用 object 关键字声明,伴生对象中声明的全是 "静态"内容,可以通过伴生 对象名称直接调用。 伴生对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。 伴生对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问 从语法角度来讲,所谓的伴生对象其实就是类的静态方法和成员的集合 从技术角度来讲,scala 还是没有生成静态的内容,只不过是将伴生对象生成了一个...

李昊轩的博客 976
上一篇: Scala中类介绍
下一篇: Scala中继承介绍
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值