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 ...
最新文章
- CUSTOMDRAW msdn网站
- CentOS7部署jar包
- 铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象
- Android 向右滑返回,退出当前activity
- php怎样使用pdo,PHP中使用PDO_PHP教程
- Transformer的学习笔记
- LeetCode 90. Subsets II
- SQL高级---SQL NULL 值
- Chapter 1. Asp.Net 概述
- EasyRecovery如何恢复wav音频文件
- rpm方式安装mysql5.7_centos下rpm方式安装mysql5.7
- oracle卸载步骤图解,oracle卸载步骤
- 电商小程序基础开发教程(一)需求分析
- 阿里云上实现DDNS公网解析
- android 图片加载 软引用_Android 异步加载网络图片并缓存到本地 软引用 学习分享(转)...
- VUE--Form表单
- js中事件加载完成之前添加蒙版
- java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...
- 用计算机上初中英语课的方法,初中英语课讲课流程
- 做保险,跟对人很重要
热门文章
- 分布式事务框架Seata
- Intermediate Python
- BPTT(BackPropagation Through Time)
- jquery setInterval() 定时器用法
- Animator动画状态机
- mysql清空数据库表
- 简单实用的Chrom浏览器模拟POST请求方式
- Windows命令行通过certutil命令查看文件的MD5-SHA1-SHA256校验值
- 独家专访 ASF 董事会主席 Craig Russell:Apache 之道—— ASF 20年成功秘诀丨二叉树视频...
- PHP漏洞利用工具开发,PHPcms二次开发,PHPcms,DEDEcms简单代码审计