【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础

3 面向对象编程基础


类的定义
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
什么都不返回:Unit
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
类成员的可见性
默认公有,其他private(本类型和嵌套类型),protected(本类型和继承类型)
封装,声明私有,getter,setter方法
私有变量,读取value=和写入value_=
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
方法的定义方式
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
参数不能用var,val去修饰;一个方法如果只有一个参数可以省略圆点而采用中缀操作符调用方法。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
构造器
类主体,主构造器,类名(参数列表),可以用val和var修饰,参数自动编程类内部成员字段;
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
辅助构造器,调用形式:This(参数列表),辅助构造器第一个表达式需要调用此前已经定义的辅助构造器或者主构造器;
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
对象
单例对象,静态成员变量,不需要实例化
用object关键字定义。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
单例对象分为伴生对象和孤立对象
伴生对象
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
鼓励对象
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
可以互相访问内部的方法和成员
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
apply方法,Scala当中独有的
apply方法调用约定:

  • 用括号传递给类实例或单例对象名一个或多个参数时
  • Scala会在相应的类或对象中查找方法名为apply
  • 且参数列表与传入的参数一致的方法
  • 并用传入的参数来调用该apply方法
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    Scala调用Array类的伴生对象的apply方法
    Java中创建数组
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    测试apply是否调用
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    apply方法不断构造对象
  • 一个class一个类
  • 给类定义一个伴生对象
  • 类的构造方法以apply方法的形式写在伴生对象中
  • 伴生对象的方案会被自动调用
  • 调用会自动生成类对象

【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
保持对象和函数之间一致性,实现点方法与括号调用的统一。
面向对象:对象.方法;函数式:函数名称(参数)
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
update方法
调用约定:

  • 当对带有括号并包括一到若干参数的对象进行赋值时编译器将调用对象的update方法
  • 并将括号里的参数和等号右边的值一起作为update方法的输入参数来执行调用
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    unapply方法
    给一个对象,提取参数,反向解析的过程。
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    继承
    抽象类
    类中没有实现的成员(可以定义实现的方法),需要用abstract关键字修饰;定义抽象类的抽象方法不需要使用关键字abstract;抽类中定义的字段没有给出初始值,需要给出类型声明。
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    扩展类
    extends关键字。重载父类的抽象成员,override关键字可选;重载父类的非抽象成员,关键字必须;只能重载val类型字段。
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
    Scala的类层次结构

【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
Nothing没有实例。

Option类
Some对象,所有以Option为返回值的都返回一个Some对象;
None对象,当返回空的时候。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
case class自动实现一个apply方法。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础

特质,Scala当中特有概念,与Java接口类似,不仅实现了接口功能,即可以定义抽象方法,还可以提供具体的方法实现;特质是混入,重用特质中的一些方法字段,间接实现多重继承。

用with和extends混入(mixin)到类中
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
模式匹配

match语句
switch-case结构
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
不仅可以匹配特定常量还可以匹配某个类型的所有值。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
可以添加守卫。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
case类,经过优化的,用于模式匹配
case class,会自动重载许多实用方法,如toString、equals和hashcode等;并为每个case类生成一个伴生对象,有apply工厂方法和unapply方法。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
自动生成伴生对象,其中包含apply和unapply方法。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础

包,解决程序中命名冲突

【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
包之外,必须引用autodepartment.MyClass
不同包可以嵌套。
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
通配符下划线(等价于Java中的*)
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础
Scala隐式添加
【Spark编程基础(2.3)】Scala语言基础—面向对象编程基础