Scala入门教程(下)

简介: Scala入门教程(下)
12. 继承
class ScientificCalculator(name: String) extends Calculator(name) {
    def log(m: Double, base: Double) = math.log(m) / math.log(base)
}


与Java的集成没区别,也是用 extends

注意: Scala类没有多继承,如:


class Student {
    val id: Int = 7
    }
class Teacher {
    val id: Int = 17
    }


假设可以有:

class TeacherAssistant extends Student, Teacher { ... }

如果要求返回 id 时, 就没办法确定返回哪个的 id

13. 重载方法
class EvenMoreScientificCalculator(name: String) extends ScientificCalculator(name) {
  def log(m: Int): Double = log(m, math.exp(1))
}


方法重载指的是在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型参数个数

14. 抽象类

你可以定义一个抽象类,它定义了一些方法但没有实现它们。取而代之是由扩展抽象类的子类定义这些方法,你不能创建抽象类的实例。


// 定义抽象类
abstract class Shape {
    def getArea():Int    // subclass should define this
}
// 扩展抽象类
class Circle(r: Int) extends Shape {
    def getArea():Int = { r * r * 3 }
}
val c = new Circle(2)


代码解释:定义了一个抽象类 Shape,里面定义了一个getArea的方法,但是没有实现它,而是定义了一个子类 Circle来继承 Shape 抽象类,然后在此子类中进行了 getArea 方法实现。


抽象类定义了一些没有实现的方法,而且抽象类无法被实例化,但可以由抽象类的子类来定义抽象类里面未实现的方法。


15. 特质

特质,是一些字段和行为的集合,可以扩展或混入(mixin)你的类中。不同于类继承,class 可以扩展多个 Traits,与Java中的接口类似。


trait Car {
  val brand: String
}
trait Shiny {
  val shineRefraction: Int
}
class BMW extends Car {
  val brand = "BMW"
}
val car = new BMW
println(car.brand)


通过 with 关键字,一个类可以扩展多个特质:


class BMW extends Car with Shiny {
  val brand = "BMW"
  val shineRefraction = 12
}


BMW类继承了Car类,而且混入了 Shiny 类的特质,所以BMW类其实是有两种特点的。

16. 集合

Scala 提供了丰富的集合库,包括:列表(List)集合(Set)映射(Map)选项(Option)元组(Tuple)


scala> val x1 = List(1, 2, 3, 4, 5)
x1: List[Int] = List(1, 2, 3, 4, 5)
scala> println(x1)
List(1, 2, 3, 4, 5)
scala> val x2 = Set(1, 2, 3)
x2: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> println(x2)
Set(1, 2, 3)
scala> val x3 = Set(1, 2, 3, 3)
x3: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> println(x3)
Set(1, 2, 3)
scala> val x4 = Map("one" -> 1, "two" -> 2)
x4: scala.collection.immutable.Map[String,Int] = Map(one -> 1, two -> 
scala> println(x4)
Map(one -> 1, two -> 2)
scala> val x5 = (2, "two")
x5: (Int, String) = (2,two)
scala> println(x5)
(2,two)
scala> val x6:Option[Int] = Some(5)
x6: Option[Int] = Some(5)
scala> println(x6)
Some(5)


如果有编程基础,相信大家大概也能猜得到含义。此处主要解释Some和Option:


Option类型代表任意的值,多用在集合操作中,它可以存储任意类型的值,Option实例就是Some或者None对象实例。

Some和None都是它的子类,他们都是final类,所以不能再有派生子类了。

Option类型数据可以使用大部分的集合操作,Option数据存取其实是对Some对象的操作。

请参考此文章:Scala:Option、Some、None


Scala的其他集合操作详细教程请看:Scala常规操作之数组、List、Tuple、Set、Map


0xFF 总结


  1. Scala内容比较多,特别是各种各样的算子操作,需要多学习一下,但是入门写个HelloWorld其实此篇文章已经够用了。
  2. 最好大家有Java基础,因为很多内容都是相同的,包括入门大数据,个人也建议应该有个Java基础。
相关文章
|
4月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
541 1
|
4月前
|
Java 大数据 Scala
Scala入门【运算符和流程控制】
Scala入门【运算符和流程控制】
|
29天前
|
分布式计算 大数据 Java
Scala 入门指南:从零开始的大数据开发
Scala 入门指南:从零开始的大数据开发
|
2月前
|
分布式计算 大数据 Java
大数据开发语言Scala入门
大数据开发语言Scala入门
|
2月前
|
IDE 大数据 Java
「AIGC」大数据开发语言Scala入门
Scala,融合OOP和FP的多范式语言,在JVM上运行,常用于大数据处理,尤其与Apache Spark配合。要开始学习,安装Scala,选择IDE如IntelliJ。基础包括变量、数据类型、控制结构、函数。Scala支持类、对象、不可变数据结构、模式匹配和强大的并发工具。利用官方文档、教程、社区资源进行学习,并通过实践提升技能。
40 0
|
4月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
11月前
|
安全 Java 编译器
Scala语言入门:初学者的基础语法指南
作为一种在Java虚拟机(JVM)上运行的静态类型编程语言,Scala结合了面向对象和函数式编程的特性,使它既有强大的表达力又具备优秀的型态控制
62 0
|
JavaScript 前端开发 Java
Scala语言入门以及基本语法
Scala语言入门以及基本语法
|
分布式计算 Java 程序员
spark开发基础之从Scala符号入门Scala
spark开发基础之从Scala符号入门Scala
165 0
spark开发基础之从Scala符号入门Scala