Scala中类介绍

Scala中的类和构造器 Scala中的类 摘要 网络上很多资料讲得不清不楚的,有些甚至是片面的错误的,看语言应该是直接用翻译器将英文翻译成中文。所以依照着网上的一些说法和自己的实验重新将一些概念和定义讲解一些。 scala编译器会自动为类中的字段添加getter方法和setter方法 可以自定义getter/setter方法来替换掉编译器自动产生的方法 用@BeanProperty注解来生成JavaBeans 阅读详情

 

scala中定义类

简单的类和无参方法,scala类最简单的形式看上去和java/C++很相似

/** * 定义一个类 */class Counter {  // 定义初始化字段未来可期  private var value = 0}

 

在scala中类并不声明为public,一个scala文件中可以包含多个类,所有这些类都具有公开可见性。类中的方法默认都是公有方法。

​class Counter {    // 定义初始化字段  private var value = 0  private var name = ""    // private[Counter] 修饰符可以定义仅有指定类的方法可以访问此字段,  // 这里的类可以是当前定义的类,也可以是包含该类的外部类  // private[Counter] var value = 0    /**   * 默认公有方法   * 在scala中类并不声明为public,一个scala文件中可以包含多个类,所有这些类都具有公开可见性   */  def increment(): Unit = {    value += 1 // 注意此处累计加1与java中写法不一样,scala不支持使用 value++  }    // 如果count函数代码块中只有一行代码可以简写为 def count() = value  def count() = {    value // 注意在scala中若最后一行数据,则该数据为返回值  }    // 类中方法的调用, 类似于java中的方式, 需要构造出对象然后调用方法  val coun = new Counter  // 在scala中如果方法中没有参数可以将后面的 () 省略  coun.increment  println(coun.count)}

 

scala中对每个字段都提供了getter和setter方法。scala文件在被JVM编码的时候,会自动创建字段的getter和setter方法,如果字段声明为private那么对应的getter和setter方法也是private。如果字段定义为val,那么只会生成getter方法。如果不需要getter和setter方法,则可以将字段声明为private[this]。

另外我们也可以直接给字段加上@BeanProperty注解 也会自动生成getter和setter方法,通过该注解会生成四个方法:

name:Stringname_(newValue:String):UnitgetName ==> 与Java互操作setName(String newValue):Unit ==> 与Java互操作​​// 我们也可以重新定义字段的getter和setter方法def privateValue: Int = value​def privateValue_(newValue: Int): Unit = {  this.value = newValue}

 

 

与java一样, scala也可以有很多的构造器,不过scala中的主构造器最为重要,其他可以有多个辅助构造器。与Java相比有两个地方不同:

    • 辅助构造器的名称是this。

    • 每一个辅助构造器都必须以一个对先前定义好的其他辅助构造器或主构造器的调用

  // 定义一个辅助构造器def this(newName: String) {  this() // 主构造器  this.name = newName}    // 定义另外一个辅助构造器def this(newName: String, newValue: Int) {  this(name)  this.value = newValue}

 

在scala中每个类都有主构造器,主构造器实际上并不是以this方法定义而是与类定义交织在一起。

/** * 括号中的内容就是主构造器的参数 *    1.主构造器中的参数可以是任意形态的 * 例如 class Person(val name: String,private var age: Int) {} *    2.构造参数中如果不指定字段类型,默认是 private[this] val * * @param name * @param age */class Person(var name: String, var age: Int) {  def desc = name + " is " + age + " years old"}

 

在scala中几乎可以在任意语法结构中嵌套任意语法结构,可以在函数中定义函数,在类中定义类。

class NetWork {        class Member(val name: String) {      val contacts = new ArrayBuffer[Member]    }        private val members = new ArrayBuffer[Member]        def join(name: String): Member = {      val m = new Member(name)      members += m      m    }      }      def main(args: Array[String]): Unit = {  // 实例化两个不同的类  val chatter = new NetWork  val myFace = new NetWork    val jason = chatter.join("jason")  val jack = chatter.join("jack")    jason.contacts += jack    val mark = myFace.join("mark")    // 不可以将myFace中的Member添加到chatter.Member元素中  // jason.contacts += mark  }

 

扫描二维码

获取更多精彩

WuMaoYin

使用podspec创建iOS插件 概述 在WWDC 2014全球开发者大会上,苹果开放了动态库、App Extension等全新的功能,这为iOS插件化开发带来了可能。在iOS开发中,动态库是iOS提供的一种资源打包方式,可以将代码文件、头文件、资源文件和说明文档等集中在一起,并且可以在运行时进行动态加载。 目前,很多应用越做越复杂,应用程序也显得越来越臃肿。试想一下,如果将一些不常用的功能做成一个插件,然后根据用户的需求从网络中... 阅读详情

相关推荐

ASTRA Toolbox学习笔记-Python

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

hou9021的博客 8261

StringBuilder/StringBuffer可变长原理

介绍 StringBuilder 可变长,即扩容原理。

Jacks丶的博客 2350

Livox MID360与Fast-LIO2的实战部署指南:从驱动安装到点云处理

本文提供Livox MID360激光雷达与Fast-LIO2激光惯性里程计从零开始的实战部署指南。详细介绍了Ubuntu系统下的驱动安装、网络配置、点云数据验证以及Fast-LIO2算法的编译、参数配置与联合启动流程,帮助开发者快速搭建移动机器人SLAM系统,并包含关键参数调优与常见故障排查方法。

java5的博客 1023

Scala类的介绍

1. 简单类和无参方法 Scala类最简单的形式看上去和Java或C++中很相似: class Counter { private var value = 0 // 必须初始化字段 def incremet() { // 方法默认是公有的 value += 1 } def current() = value } 在Scala中,类并不声明为public。Scala源文件可以包含多个类,所有这些类都具有公有可见性。 使用该类需要做的就是构造对象并按照通常的

pageniao的博客 705

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南

本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。

red88的博客 573

VS2019中C++动态链接库(DLL)的创建与调用

VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。

qq_42232522的博客 7562

Scala的类定义

目录 一、⾯向对象的概念 二、Java类的定义 三、Scala定义类的属性 四、Scala⾃定义get和set⽅法 五、Bean属性 六、Scala定义类的构造器 七、cala创建对象和访问属性 一、⾯向对象的概念 如何理解抽象? 定义⼀个类,实际上就是把⼀类事物的共有的属性和⾏为提取出来,形成⼀个物理模型(模板)。这种研究问题的⽅ 法称为抽象。 ⾯向对象编程有三⼤特征:封装、继承和多态。 封装(encapsulation)就是把抽象出的数据和对数据的...

CyAurora的博客 3023

【行业解决方案篇十五】【DeepSeek物流优化:车辆路径规划算法】

写完这篇技术解析,突然想起那位多绕150公里的王师傅——现在他的车载平板会实时显示"路径健康度",当偏离最优路线超过5%就自动报警。从节约算法到深度强化学习,从三维装载到时序预测,这些技术最终化作每辆货车少烧的1升柴油,每个快递小哥早回家的1小时。最后说个浪漫的事:系统曾为某偏远山区规划出一条穿越枫叶林的配送路线,不仅节省23公里,还成了网红打卡路线。原来物流优化的尽头,不仅是冰冷的数学,还有人间烟火气的温度。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 292

Scala--类

scala--类类(class)定义类抽象类隐式类单例对象(object) 类(class) 类通过class关键字定义 类通过new关键字创建实例 类拥有成员变量和方法 类的成员默认为public,也支持private、protected 类中无法定义静态成员变量和方法 类无需明确定义构造方法,通过构造参数列表声明为类的一部分 定义类 构造器 主构造器 辅助构造器 成员变量与方法 //主构造器执行类定义中的所有语句 class Point(xc: Int, yc:

timicai的博客 350

“华为杯”研究生数学建模竞赛2020年-【华为杯】D题:无人机集群协同对抗(附获奖论文和MATLAB代码实现)

1.问题重述摘 要:本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。,构建了。我们综合考虑了,和。首先分析红方在集群约束下的贪婪队形和拦截策略,然后我们基于内点法联合MATLAB和AMPL编程求解蓝方突防的非线性规划解,最后基于蒙特卡洛法对整个蓝方突防过程进行推演,得到突防概率图。通过推演,我们提出了两块的区域作为所求区域,并对蓝方的最优突防策略进行分析。

getusushu的博客 1550

Debezium 性能调优实战:吞吐量、延迟与资源平衡

摘要: 本文分享了团队如何通过系统性调优将Debezium从初始3,200 TPS/2.8秒延迟提升至15,200 TPS/210ms延迟的实战经验。优化涵盖四个层面:1)Debezium连接器配置(批处理、快照并行、消息精简);2)Kafka分区策略与Avro序列化缓存;3)JVM改用ZGC及OS参数调优;4)MySQL的binlog与I/O优化。关键发现包括分区数黄金公式、sync_binlog调整带来56%的I/O负载下降,以及避免盲目增大队列内存等陷阱。最终实现吞吐量提升4.75倍,并强调性能调优需

爱丹丹的博客 358

【图文详细 】Scala——类

1、Scala 类  Scala 的类与 Java、C++的类比起来更简洁,学完之后你会更爱 Scala!!!    1.1、定义类  定义一个 Student 类:  package com.mazh.scala.day2.oop // 在 Scala 中,类并不用声明为 public 。 // 在 Scala 文件中,文件名可以不用和类名一致 //Scala 源文件中可以...

谦卑t 458

开源数字人、虚拟直播部署教程

对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

南七小僧的学海无涯 4560

【Scala】Scala的类层级

Scala的类层级Scala里,每个类都继承自通用的名为Any的超类。因为所有的类都是Any的子类,所以定义在Any中的方法就是“共同的”方法:它们可以被任何对象调用。Scala还在层级的底端定义了一些类,如Null和Nothing,扮演通用的子类。即,Any是所有其他类的超类,Nothing是所有其他类的子类。Any类层级的顶端是Any类,定义了下列方法:final def ==(that: An

Jason Ding的专栏 2918

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Scala类

class 定义类的格式(Scala类名的第一个字母要大写) class classname(参数列表) extends 父类{} class Poimt(xc:Int,yc:Int){ var x:Int=xc; var y:Int=yc; def move(dx:Int,dy:Int): Unit ={ x=x+dx; y=y+dy; ...

江西师范大学-20届-吴悠 414

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

创建scala类

创建scala类类的定义与调用类中的构造器在主构造器中定义属性伴生类和伴生对象类的继承抽象类 类的定义与调用 在一个scala源文件中,类的定义不需要 使用public,一个源文件可以定义多个类,都是默认public class Test1 { private var age = 25//scala中的属性必须初始化 //使用注释@BeanProperty可以自动生成get和set方法,但...

JAVA & HTML 2479

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Scala 类和对象

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

Simple 专栏 1574

Scala 类和对象

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

Hua_TZ的博客 1399

[Scala]Scala学习笔记四 类

1. 简单类与无参方法class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注在Scala中,类并不声明为public. Scala源文件可以包含多个类,所有这些类都具有公有可见性.属性不声明默认为public.使用类:val p = new Person // 或者new Person() p.ag

SmartSi 2013

scala类与对象

1, 定义类 2, 类的继承

eyeofeagle的博客 499

scala的类

目录 1.类的声明 2.类的对象的封装 3.构造函数 1.类的声明 包含类的对象 包含类的方法 例子: class HelloWorld { private var name = "leo" def sayHello() { print("Hello, " + name) } def getName = name } 2.类的对象的封装 (1)...

威少(微笑) 1656

第七章 Scala基础——类继承

一、Scala的类继承 在面向对象编程里,为了节省代码量,也为了反映实际各种类之间的联系,通常采取两种策略:包含和继承。包含代表了一种has-a的关系,也就是一个类包括了另一个类的实例。例如,午餐的菜单含有水果,那么就可以先编写一个水果类,然后再编写一个午餐类,并在午餐类里包含水果类的对象,但这两者没有必然联系。继承代表了一种is-a的关系,也就是从一个宽泛的类可以派生出更加具体的类。例如,编写...

qq_34291505的博客 9533

scala类的定义

package com.ibfw /** * auther by bbaiggey */ import scala.beans.BeanProperty import scala.collection.mutable.ArrayBuffer /*  * 类的定义  * field的getter和setter  * construction详解  * 内部类介绍  */

bbaiggey_bigdata的博客 1262

scala当中的类

1、类的定义与创建 创建一个scala class来定义我们的一个类。类当中可以定义各种属性或者方法,或者函数都可以 class Person { //定义一个属性,叫做name的,使用val不可变量来进行修饰 // 用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量) ...

weixin_30794491的博客 149

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学习】之Scala中的类

文章目录SCALA CLASSESBasic class constructor`val` makes fields read-onlyClass constructorsOther Scala class examplesAUXILIARY CLASS CONSTRUCTORSNotesSUPPLYING DEFAULT VALUES FOR CONSTRUCTOR PARAMETERSBenefitsBonus: Named parametersA FIRST LOOK AT SCALA METHODS

有问题的请私信或关注v【技术印记】留言 531
上一篇: Scala中Map与集合
下一篇: Scala中对象介绍
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值