目录

一、类

(一)类的定义

(二)类的实例化

二、单例对象

(一)单例对象概念

(二)案例演示

三、伴生对象

(一)伴生对象概念

(二)案例演示

四、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. CUSTOMDRAW msdn网站
  2. CentOS7部署jar包
  3. 铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象
  4. Android 向右滑返回,退出当前activity
  5. php怎样使用pdo,PHP中使用PDO_PHP教程
  6. Transformer的学习笔记
  7. LeetCode 90. Subsets II
  8. SQL高级---SQL NULL 值
  9. Chapter 1. Asp.Net 概述
  10. EasyRecovery如何恢复wav音频文件
  11. rpm方式安装mysql5.7_centos下rpm方式安装mysql5.7
  12. oracle卸载步骤图解,oracle卸载步骤
  13. 电商小程序基础开发教程(一)需求分析
  14. 阿里云上实现DDNS公网解析
  15. android 图片加载 软引用_Android 异步加载网络图片并缓存到本地 软引用 学习分享(转)...
  16. VUE--Form表单
  17. js中事件加载完成之前添加蒙版
  18. java中的数据解析是_Java从网络中请求获取JSon数据以及解析JSON数据----(自创,请注明)...
  19. 用计算机上初中英语课的方法,初中英语课讲课流程
  20. 做保险,跟对人很重要

热门文章

  1. 分布式事务框架Seata
  2. Intermediate Python
  3. BPTT(BackPropagation Through Time)
  4. jquery setInterval() 定时器用法
  5. Animator动画状态机
  6. mysql清空数据库表
  7. 简单实用的Chrom浏览器模拟POST请求方式
  8. Windows命令行通过certutil命令查看文件的MD5-SHA1-SHA256校验值
  9. 独家专访 ASF 董事会主席 Craig Russell:Apache 之道—— ASF 20年成功秘诀丨二叉树视频...
  10. PHP漏洞利用工具开发,PHPcms二次开发,PHPcms,DEDEcms简单代码审计