由于学习Spark需要用到Scala,这里简单记录一下Scala的一些基础语法。

1 权限修饰符

如果字段前面什么修饰符都没有就默认是public,外部可以访问该字段。对于类而言,我们并不需要声明为public,Scala文件中包含的多个类之间,都是彼此可见的。

2 方法

2.1 方法定义

def functionName ([参数列表]) : [return type] = {// 方法主体
}
  • 如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract)
  • 在Scala中不返回任何值,那么就用Unit表示
  • 方法的返回值,不需要靠return语句,方法里面的最后一个表达式的值就是方法的返回值
  • 如果大括号里面只有一行语句,那么也可以直接去掉大括号
  • 返回值类型和等号也可以省略
  • 参数列表中没有参数的话括号也可以省略

2.2 方法调用

  • 大体上和java类似
  • Scala在调用无参方法时,是可以省略方法名后面的圆括号的。
  • a 方法 b 和 a.方法(b)等价

2.3 getter和setter方法

在Scala中,可以通过定义类似getter和setter的方法,分别叫做valuevalue_=

代码示例:

class Counter {private var privateValue = 0  //变成私有字段,并且修改字段名称def value = privateValue //定义一个方法,方法的名称就是原来我们想要的字段的名称def value_=(newValue: Int){if (newValue > 0) privateValue = newValue //只有提供的新值是正数,才允许修改}def increment(step: Int): Unit = { value += step}def current(): Int = {value}
}

value后面的参数列表、返回值、等于号、方法体的大括号都被省略了
value_=是函数名,以及value_= 后面的 :unit = 被省略了

2.4 构造器

Scala构造器包含1个主构造器和若干个(0个或多个)辅助构造器。

Scala的主构造器是整个类体,需要在类名称后面罗列出构造器所需的所有参数,这些参数被编译成字段,字段的值就是创建对象时传入的参数的值。

辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义的辅助构造器或主构造器。

3 伴生对象

Scala并没有提供Java那样的静态方法或静态字段,但是,可以采用object关键字实现单例对象,具备和Java静态方法同样的功能。

在Java中,我们经常需要用到同时包含实例方法和静态方法的类,在Scala中可以通过伴生对象来实现。当单例对象与某个类具有相同的名称时,它被称为这个类的“伴生对象”。类和它的伴生对象必须存在于同一个文件中,而且可以相互访问私有成员(字段和方法)。

代码示例:

class Person {private val id = Person.newPersonId() //调用了伴生对象中的方法private var name = ""def this(name: String) {this()this.name = name}def info() { printf("The id of %s is %d.\n",name,id)}
}
object Person {private var lastId = 0  //一个人的身份编号private def newPersonId() = {lastId +=1lastId}def main(args: Array[String]){val person1 = new Person("Ziyu")val person2 = new Person("Minxing")person1.info()person2.info()      }
}

运行结果:

The id of Ziyu is 1.
The id of Minxing is 2.

Scala源代码编译后都会变成JVM字节码,实际上,在编译上面的源代码文件以后,在Scala里面的class和object在Java层面都会被合二为一,class里面的成员成了实例成员,object成员成了static成员。

4 继承

Scala中的继承与Java有着显著的不同:
(1)重写一个非抽象方法必须使用override修饰符。
(2)只有主构造器可以调用超类的主构造器。
(3)在子类中重写超类的抽象方法时,不需要使用override关键字。
(4)可以重写超类中的字段,需要使用override关键字。
Scala和Java一样,不允许多继承。

定义抽象类:
(1)定义一个抽象类,需要使用关键字abstract。
(2)定义一个抽象类的抽象方法,不需要关键字abstract,只要把方法体空着,不写方法体就可以。
(3)抽象类中定义的字段,只要没有给出初始化值,就表示是一个抽象字段,但是,抽象字段必须要声明类型

5 特质

在Scala中没有接口的概念,而是提供了“特质(trait)”,它不仅实现了接口的功能,还具备了很多其他的特性。Scala的特质是代码重用的基本单元,可以同时拥有抽象方法和具体方法。Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承。

特质定义使用关键字trait

特质的抽象方法不需要使用abstract关键字,特质中没有方法体的方法,默认就是抽象方法。

特质定义好以后,就可以使用extendswith关键字把特质混入类中。混入多个特质时,使用extends关键字混入第1个特质,后面可以反复使用with关键字混入更多特质。

Scala 面向对象相关推荐

  1. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  2. educoder Scala面向对象编程

    第一关: 编程要求     本关的编程任务是补全huawei类中从 Phone 类继承的函数,以使得程序运行结果如预期输出.根据提示,在右侧编辑器补充代码. 测试说明 下面是对平台如何评测你所实现功能 ...

  3. scala面向对象总结

    scala面向对象总结. Java是面向对象语言,但存在着非面向对象内容:基本类型.null,静态方法等: scala是天生面向对象语言,一切皆对象 语法总结: scala类默认是public的,不必 ...

  4. Scala核心编程 第六章—Scala面向对象编程(一)

    佛家有云:一花一世界,一叶一菩提,而我们所学的Java就是一个以面向对象为基础的程序语言,在Java中是万物皆为对象,但是在Scala中万事万物皆为对象,由此引出了Scala面向对象编程,接下来,让我 ...

  5. 3000门徒内部训练绝密视频(泄密版)第2课:Scala面向对象彻底精通及Spark源码阅读

    Scala面向对象彻底精通及Spark源码阅读 不用写public class中的public class Person {private var myName = "flink" ...

  6. Scala 面向对象编程

    一 定义一个简单的类 1.1定义类,包含field以及方法 classHelloWorld { private var name = "leo" def sayHello() { ...

  7. 重学scala:scala面向对象编程之类与对象

    文章目录 一.类 1.类的定义 2.类的构造器 二.对象 1.scala中的object 2.scala中的伴生对象 3.scala中object的apply方法 4.scala中object的mai ...

  8. Scala面向对象基础--类和对象

    一.类和对象介绍 在Scala里,类是用关键字"class"开头的代码定义,它是用于创建对象的蓝图.一个类就是一个类型,不同的类就是不同的类型,一个对象的类型就是创建它用的那个类. ...

  9. 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)

    目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...

  10. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

最新文章

  1. 手把手教你如何进行FileZilla的安装
  2. CreateEvent创建事件对象
  3. partial in latex
  4. elasticsearch手动创建和删除索引
  5. Python缩进的几个原则
  6. C/C++如何快速区分指针数组|数组指针|函数指针|指针函数
  7. chrome 控制台 base64加密解密
  8. 怎么用python找因子_python找出因数与质因数的方法
  9. 配电室综合监控系统企业标准(试行)
  10. 2022华为杯数学建模研赛选题建议和思路分析
  11. 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
  12. linux vsftpd.conf,Linux下的vsftpd配置详解
  13. 牛客网sql练习题解(43-51)
  14. 34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。
  15. WAV音乐文件无法修改标题
  16. 介绍 GBase 8c产品架构
  17. Q萌可爱,奇瑞QQ冰淇淋给年轻人爱的大礼物
  18. 认识css长度单位 px % em rem vh vw
  19. 使用图灵机器人实现微信消息的智能回复
  20. 虚拟试穿--测试上衣代码详解

热门文章

  1. 名帖339 张旭 草书《心经》
  2. AMiner会议论文推荐第五十一期
  3. 【猫猫的Unity Shader之旅】之双面材质和多Pass渲染
  4. 阿里云linux服务器安装桌面
  5. HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)
  6. html标签手册 360doc,360doc网文摘手
  7. 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. // // AABC
  8. 小白快速完成图片设计的3款在线编辑器工具
  9. Leetcode 1110:删点成林(超详细的解法!!!)
  10. Java 8 跳出foreach循环,跳出本次循环,继续执行,之前的for each循环如何跳出本次循环,跳出循环,跳出多层for循环。