目录

一、类

(一)类的定义

(二)类的实例化

二、单例对象

(一)单例对象概念

(二)案例演示

三、伴生对象

(一)伴生对象概念

(二)案例演示

四、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

二、单例对象

(一)单例对象概念

Scala中没有静态方法静态字段,但是可以使用关键字object定义一个单例对象,单例对象中的方法相当于Java中的静态方法,可以直接使用“单例对象名.方法名”方式进行调用。单例对象除了没有构造器参数外,可以拥有类的所有特性。

(二)案例演示

创建Person单例对象,包含三个私有属性和一个公共方法

直接通过单例对象名调用其speak()方法

三、伴生对象

(一)伴生对象概念

(二)案例演示

创建Scala类Student

四、get和set方法

(一)生成原则

1、val修饰的属性

系统会自动生成一个私有常量属性和一个公有get方法

2、var修饰的属性

3、private var修饰的属性

4、private[this]修饰的属性

(二)案例演示

1、用户自己编写私有属性的Scala风格的get和set方法

2、用户自己编写私有属性的Java风格的get和set方法

五、构造器

(一)主构造器

1、构造器参数带val或var

2、构造器参数带访问权限

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
  • 每一个辅助构造器的方法体中必须首先调用其他已定义的构造器
  • 辅助构造器的参数不能使用varval进行修饰

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类,实现PetRunnableFlyable特质

Spark学习笔记09:Scala类和对象相关推荐

  1. Spark学习笔记[1]-scala环境安装与基本语法

    Spark学习笔记[1]-scala环境安装与基本语法   正所谓工欲善其事必先利其器,Spark的开发语言不是java而是scala,虽然都是运行于JVM,但是两门语言的基本特性还是有些不一样,这里 ...

  2. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  3. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  4. python学习笔记:python类和对象,文件操作,网络编程

    目录 一.python面向对象 1.类和对象的定义 2.单继承 3.多继承 4.成员属性 5.异常 6.@property 二.python文件操作 文件的打开和读写 文件对象接口汇总 三.pytho ...

  5. 【Java学习笔记一】类和对象

    面向对象程序设计的一个一个重要特点是:封装性. 这里的封装性有两方面含义:一是将有关的数据和操作代码封装在一个对象中形成一个基本单位,各个对象之间相互独立互不干扰,二是将对象中某些部分对外隐蔽,即隐蔽 ...

  6. 学习笔记5(类和对象)

    一.实例和静态 1.实例 类中的实例都有自己的字段,再每个类中都可以创建一系列实例对象,并将值储存在实例字段中. box.setLength(10); 这段代码将10储存在一个被box引用的实例的字段 ...

  7. Python学习笔记(13)-Python类与对象示例

    点此查看 零基础Python全栈文章目录及源码下载 本文目录 1. 简介 2. Python类的定义 3. Python类的动态语言特性 4. Python类中属性的访问控制 1. 简介 Python ...

  8. Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  9. Kotlin学习笔记 第二章 类与对象 第七节 数据类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

最新文章

  1. 输入空格hdu - 1010 - Tempter of the Bone
  2. 《编程原本 》一2.1 变换
  3. [每天进步一点 -- 流水账]第3周
  4. 03018_监听器Listener
  5. liferay 如何使用javascript
  6. android studio ignore 模板,android studio git ignore
  7. java定义一个方法,返回a的b次方
  8. 013.Makefile
  9. Linux 内存中的Cache
  10. 《云周刊》69期:开门红利!阿里云2月活动来袭
  11. Android getevent,sendevent,input keyevent
  12. TeamTalk源码分析(一)—— TeamTalk介绍
  13. 程序人生:程序员如何和老板谈升职加薪
  14. Web安全—暴力破解(pikachu)
  15. [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.
  16. 船舶物资与市场杂志船舶物资与市场杂志社船舶物资与市场编辑部2022年第7期目录
  17. python多线程中join()的理解
  18. 锐思财经专访:冒志鸿解读 Libra | ArcBlock 媒体
  19. Springcloud微服务概述
  20. 夏季晚睡早起符合养生原则

热门文章

  1. javascript编辑表格
  2. 关于一元线性回归、共线性与STATA实现
  3. excel怎么实现抠图效果?
  4. 金油热点分析11.2黄金走势分析,原油策略白银操作建议
  5. Google, FaceBook, Amazon 加州求职记
  6. xxl-job 调度中心/执行器/Springboot
  7. 代码Review常见问题
  8. 视频号引流到公众号——一键关注公众号
  9. 最大流算法——预流推进
  10. 渗透测试中的certutil