Spark学习笔记09:Scala类和对象
目录
一、类
(一)类的定义
(二)类的实例化
二、单例对象
(一)单例对象概念
(二)案例演示
三、伴生对象
(一)伴生对象概念
(二)案例演示
四、get和set方法
(一)生成原则
1、val修饰的属性
2、var修饰的属性
3、private var修饰的属性
4、private[this]修饰的属性
(二)案例演示
1、用户自己编写私有属性的Scala风格的get和set方法
2、用户自己编写私有属性的Java风格的get和set方法
五、构造器
(一)主构造器
1、构造器参数带val或var
2、构造器参数带访问权限
3、构造器参数不带var或val
4、类的初始化语句
5、私有化构造器
6、无参构造器
(二)辅助构造器
1、定义辅助构造器的注意事项
2、案例演示
(1)无参主构造器与有参辅助构造器
(2)有参主构造器与有参辅助构造器
六、抽象类
(一)抽象类的定义
(二)抽象类的特征
(三)案例演示
1、创建抽象类 - Person
2、继承抽象类,创建普通类 - Teacher
3、创建测试单例对象 - TestTeacher
4、说明
七、特质
(一)特质的概念
(二)特质的定义
1、语法格式
2、案例演示
任务1、创建宠物特质 - Pet
任务2、创建奔跑特质 - Runnable
任务3、创建飞翔特质 - Flyable
(三)特质的实现
1、语法格式
(1)实现一个特质
(2)实现多个特质
2、案例演示
任务1、实现一个特质
任务2、实现多个特质
一、类
(一)类的定义
- 对象是类的具体实例,类是抽象的,不占用内存,而对象是具体的,占用存储空间。
- 面向对象三大特性之一:封装(encapsulation) - 封装数据和操作
- Scala中一个简单的类定义是使用关键字
class
,类名必须大写。
(二)类的实例化
实例化User
类,调用其speak()
方法
- 不能私有属性
name
二、单例对象
(一)单例对象概念
(二)案例演示
三、伴生对象
(一)伴生对象概念
(二)案例演示
四、get和set方法
(一)生成原则
1、val修饰的属性
2、var修饰的属性
3、private var修饰的属性
4、private[this]修饰的属性
(二)案例演示
1、用户自己编写私有属性的Scala风格的get和set方法
2、用户自己编写私有属性的Java风格的get和set方法
五、构造器
(一)主构造器
1、构造器参数带val或var
2、构造器参数带访问权限
- 可以通过对主构造器的参数添加访问修饰符来控制参数的访问权限
- 创建Person类,将参数age设置为私有的,参数name设置为不可修改(val)
- 系统会为
name
属性添加一个公共的get方法 - 系统会为
age
属性添加一个私有的get和set方法
class Person (val name: String, private var age: Int) {}
3、构造器参数不带var或val
class Person (name: String, age: Int) {}
class Person (private[this] val name: String, private[this] val age: Int) {}
4、类的初始化语句
5、私有化构造器
6、无参构造器
去掉类名Bird
后面的()
,系统依然会提供一个无参构造器,程序运行不会报错
(二)辅助构造器
1、定义辅助构造器的注意事项
- 辅助构造器的方法名称为
this
- 每一个辅助构造器的方法体中必须首先调用其他已定义的构造器
- 辅助构造器的参数不能使用
var
或val
进行修饰
2、案例演示
(1)无参主构造器与有参辅助构造器
(2)有参主构造器与有参辅助构造器
- 主构造器还可以与辅助构造器同时使用,在这种情况下,一般辅助构造器的参数要多于主构造器
六、抽象类
(一)抽象类的定义
abstract class 类名 {}
(二)抽象类的特征
抽象类不能被实例化。
抽象类中可以定义抽象字段(没有初始化的字段)和抽象方法(没有被实现的方法),也可以定义被初始化的字段和被实现的方法。
若某个子类继承了一个抽象类,则必须实现抽象类中的抽象字段和抽象方法,且实现的过程中可以添加override关键字,也可以省略。若重写了抽象类中已经实现的方法,则必须添加override关键字。
(三)案例演示
1、创建抽象类 - Person
2、继承抽象类,创建普通类 - Teacher
3、创建测试单例对象 - TestTeacher
4、说明
Teacher类中speak()方法的地址字段(address)是从父类(抽象类Person)中继承而来的。由于该字段在Person中有初始化值,不是抽象字段,若需要在Teacher类中修改该字段的值,则可以在Teacher类的构造函数或其它方法中使用this.address对其重新赋值。
七、特质
(一)特质的概念
(二)特质的定义
1、语法格式
trait 特质名 {// 抽象字段// 抽象方法// 普通字段// 普通方法
}
2、案例演示
任务1、创建宠物特质 - Pet
任务2、创建奔跑特质 - Runnable
任务3、创建飞翔特质 - Flyable
(三)特质的实现
- 类可以使用关键字
extends
实现特质,但必须实现特质中未实现的字段和方法(抽象字段和抽象方法),这一点与继承抽象类是一致的。
1、语法格式
(1)实现一个特质
class 类名 extends 特质名 {// 实现抽象字段// 实现抽象方法
}
(2)实现多个特质
- 如果需要实现的特质不止一个,那么可以通过
with
关键字添加额外特质,但位于最左侧的特质必须使用extends
关键字。
class 类名 extends 特质名1 with 特质名2 with 特质名3 …… with 特质名n {// 实现抽象字段// 实现抽象方法
}
2、案例演示
任务1、实现一个特质
- 创建
Cat
类,实现Pet
特质
任务2、实现多个特质
- 创建
Bird
类,实现Pet
、Runnable
、Flyable
特质
Spark学习笔记09:Scala类和对象相关推荐
- Spark学习笔记[1]-scala环境安装与基本语法
Spark学习笔记[1]-scala环境安装与基本语法 正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...
- Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- python学习笔记:python类和对象,文件操作,网络编程
目录 一.python面向对象 1.类和对象的定义 2.单继承 3.多继承 4.成员属性 5.异常 6.@property 二.python文件操作 文件的打开和读写 文件对象接口汇总 三.pytho ...
- 【Java学习笔记一】类和对象
面向对象程序设计的一个一个重要特点是:封装性. 这里的封装性有两方面含义:一是将有关的数据和操作代码封装在一个对象中形成一个基本单位,各个对象之间相互独立互不干扰,二是将对象中某些部分对外隐蔽,即隐蔽 ...
- 学习笔记5(类和对象)
一.实例和静态 1.实例 类中的实例都有自己的字段,再每个类中都可以创建一系列实例对象,并将值储存在实例字段中. box.setLength(10); 这段代码将10储存在一个被box引用的实例的字段 ...
- Python学习笔记(13)-Python类与对象示例
点此查看 零基础Python全栈文章目录及源码下载 本文目录 1. 简介 2. Python类的定义 3. Python类的动态语言特性 4. Python类中属性的访问控制 1. 简介 Python ...
- Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第七节 数据类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
最新文章
- 输入空格hdu - 1010 - Tempter of the Bone
- 《编程原本 》一2.1 变换
- [每天进步一点 -- 流水账]第3周
- 03018_监听器Listener
- liferay 如何使用javascript
- android studio ignore 模板,android studio git ignore
- java定义一个方法,返回a的b次方
- 013.Makefile
- Linux 内存中的Cache
- 《云周刊》69期:开门红利!阿里云2月活动来袭
- Android getevent,sendevent,input keyevent
- TeamTalk源码分析(一)—— TeamTalk介绍
- 程序人生:程序员如何和老板谈升职加薪
- Web安全—暴力破解(pikachu)
- [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.
- 船舶物资与市场杂志船舶物资与市场杂志社船舶物资与市场编辑部2022年第7期目录
- python多线程中join()的理解
- 锐思财经专访:冒志鸿解读 Libra | ArcBlock 媒体
- Springcloud微服务概述
- 夏季晚睡早起符合养生原则