大数据Scala系列之类

简介: 大数据Scala系列之类类的定义Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。如果没有指定访问修饰符符,默认情况下,Scala 对象的访问级别都是 public。

大数据Scala系列之类

  1. 类的定义

Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。

如果没有指定访问修饰符符,默认情况下,Scala 对象的访问级别都是 public。

私有(Private)成员

用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。

class Outer{

class Inner{
private def f(){println("f")}
class InnerMost{
    f() // 正确
    }
}
(new Inner).f() //错误

}

(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private,而访问不在类 Inner 之内。

但在 InnerMost 里访问 f 就没有问题的,因为这个访问包含在 Inner 类之内。

Java中允许这两种访问,因为它允许外部类访问内部类的私有成员。

保护(Protected)成员

在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。

package p{
class Super{

protected def f() {println("f")}
}
class Sub extends Super{
    f()
}
class Other{
    (new Super).f() //错误
}

}

类的定义示例:

//定义Point类,构造器带有两个参数
class Point(var x: Int, var y: Int) {

//无返回值的类方法

def move(dx: Int, dy: Int): Unit = {

x = x + dx
y = y + dy

}

//没有参数但是返回值为String类型的重写方法

override def toString: String =

s"($x, $y)"

}

//创建类的实例
val point1 = new Point(2, 3)
point1.x // 2
println(point1) // prints (2, 3)

构造器可以带有默认值:

class Point(var x: Int = 0, var y: Int = 0){
...
}
val origin = new Point // x, y都取默认值0
val point1 = new Point(1)//x=1,y=0
println(point1.x) // prints 1

私有成员变量以及重新定义的Getter/Setter方法:

private var _x = 0
private var _y = 0
private val bound = 100

def x = _x
def x_= (newValue: Int): Unit = {

if (newValue < bound) _x = newValue else printWarning

}

def y = _y
def y_= (newValue: Int): Unit = {

if (newValue < bound) _y = newValue else printWarning

}

private def printWarning = println("WARNING: Out of bounds")
}

val point1 = new Point
point1.x = 99
point1.y = 101 // prints the warning

类定义中的其他细节:

//在Scala中,类并不用声明为public。
//Scala源文件中可以包含多个类,所有这些类都具有公有可见性。
class Person {
//用val修饰的变量是只读属性的,只带getter方法但没有setter方法
//(相当与Java中用final修饰的变量)
//字段必须初始化
val id = "1234"

//用var修饰的变量,默认同时有公开的getter方法和setter方法
var age: Int = 18

//类私有字段,有私有的getter方法和setter方法,只能在类的内部使用
private var name: String = "王老五"

//对象私有字段,访问权限更加严格的,Person类的方法只能访问到当前对象的字段
private[this] val hobby = "旅游"
}

scala中,在实现属性时你有如下四个选择:

var foo: Scala自动合成一个getter和一个setter

val foo: Scala自动合成一个getter

由你来定义foo和foo_=方法

由你来定义foo方法

  1. 构造器
    注意:

1.主构造器会执行类定义中的所有语句

2.主构造器如果有参数直接放置在类名之后

class ConstructorDemo ( val id: Int ) { … }

3.主构造器变成私有的,可以像这样放置private关键字:

class ConstructorDemo private ( val id: Int ) { … }

此时,用户必须通过辅助构造器来构造Person对象

class ConstructorDemo {

private var var1 = ""

private var var2 = 0

//辅助构造器1
def this(var1:String) {

this()  //调用主构造器
this.var1 = var1

}

//辅助构造器2
def this(var1:String, var2:Int) {

this(var1) //调用辅助构造器1
this.var2 = var2

}

}

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
9月前
|
大数据 编译器 Scala
【大数据】初识Scala 2
【大数据】初识Scala
65 0
|
5月前
|
分布式计算 Java 大数据
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
52 0
|
5月前
|
大数据 Scala
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
22 0
|
6月前
|
Scala
163 Scala 类
163 Scala 类
20 0
|
9月前
|
安全 大数据 Java
【大数据】初识Scala 4
【大数据】初识Scala
76 0
|
9月前
|
大数据 Java Scala
【大数据】初识Scala 3
【大数据】初识Scala
51 0
|
9月前
|
分布式计算 Java 大数据
【大数据】初识Scala 1
【大数据】初识Scala
64 0
|
12月前
|
存储 数据采集 XML
大数据数据采集的数据来源的日志数据之搜索类数据
在大数据领域,数据采集是一个非常重要的环节。日志数据已经成为了大数据应用中不可或缺的一部分,尤其是搜索类数据。本文将介绍搜索类日志数据作为数据来源的特点以及其采集流程。
136 0
|
存储 大数据 Scala
大数据开发基础的编程语言的Scala的Actor编程
当谈到大数据开发时,Scala是一个非常流行的编程语言。Scala是一种静态类型的编程语言,它结合了面向对象和函数式编程范型。Scala为大数据处理提供了强大的支持,因此在许多大数据项目中被广泛使用。其中,Scala的Actor编程模型可以帮助我们设计和实现高效的并发系统。
73 0
|
12天前
|
分布式计算 大数据 BI
MaxCompute产品使用合集之MaxCompute项目的数据是否可以被接入到阿里云的Quick BI中
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。