Scala学习总结③

抽象属性和抽象方法

基本语法

定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类

定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性

定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法

继承&重写

如果父类为抽象类,那么子类需要将抽象的属性和方法实现,否则子类也需声明为抽象类

重写非抽象方法需要用 override 修饰,重写抽象方法则可以不加 override。

子类中调用父类的方法使用 super 关键字

子类对抽象属性进行实现,父类抽象属性可以用 var 修饰;

子类对非抽象属性重写,父类非抽象属性只支持 val 类型,而不支持 var。

因为 var 修饰的为可变变量,子类继承之后就可以直接使用,没有必要重写

匿名子类

和 Java 一样,可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类。

单例对象(伴生对象)

Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概念)。但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象来模拟类对象,该对象为单例对象。若单例对象名与类名一致,则称该单例对象这个类的伴生对象,这个类的所有"静态"内容都可以放置在它的伴生对象中声明。

单例对象语法

基本语法

object Person{

val country:String="China"

}

说明

  1. 单例对象采用object 关键字声明

  2. 单例对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。

  3. 单例对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问。

apply 方法

  1. 通过伴生对象的 apply 方法,实现不使用 new 方法创建对象。

  2. 如果想让主构造器变成私有的,可以在()之前加上 private。

  3. apply 方法可以重载。

  4. Scala 中 obj(arg)的语句实际是在调用该对象的 apply 方法,即 obj.apply(arg)。用以统一面向对象编程和函数式编程的风格。

  5. 当使用 new 关键字构建对象时,调用的其实是类的构造方法,当直接使用类名构建对象时,调用的其实时伴生对象的 apply 方法。

特质基本语法

一个类具有某种特质(特征),就意味着这个类满足了这个特质(特征)的所有要素, 所以在使用时,也采用了extends 关键字,如果有多个特质或存在父类,那么需要采用with 关键字连接。 说明 类和特质的关系:使用继承的关系。

当一个类去继承特质时,第一个连接词是 extends,后面是with。 如果一个类在同时继承特质和父类时,应当把父类写在 extends 后。 特质叠加 由于一个类可以混入(mixin)多个 trait,且 trait 中可以有具体的属性和方法,若混入的特质中具有相同的方法(方法名,参数列表,返回值均相同),必然会出现继承冲突问题。

冲突分为以下两种

1、一个类(Sub)混入的两个 trait(TraitA,TraitB)中具有相同的具体方法,且两个 trait 之间没有任何关系,解决这类冲突问题,直接在类(Sub)中重写冲突方法。

2、一个类(Sub)混入的两个 trait(TraitA,TraitB)中具有相同的具体方法,且两个 trait 继承自相同的 trait(TraitC),及所谓的"钻石问题",解决这类冲突问题,Scala 采用了特质叠加的策略。

今日份学习总结完毕 \(^_^)/

相关推荐
92742 小时前
12函数参数
scala
geilip4 天前
知识体系_scala_利用scala和spark构建数据应用
开发语言·spark·scala
Hello.Reader4 天前
Flink 高级配置发行版剖析、Scala 版本、Table 依赖与 Hadoop 集成实战
hadoop·flink·scala
IvanCodes8 天前
八、Scala 集合与函数式编程
大数据·开发语言·scala
卓码软件测评9 天前
第三方软件测试公司:【Gatling基于Scala的开源高性能负载测试工具】
测试工具·开源·scala·压力测试·可用性测试·第三方软件测试
南棱笑笑生10 天前
20250931在RK3399的Buildroot【linux-6.1】下关闭camera_engine_rkisp
开发语言·后端·scala·rockchip
今天没有盐12 天前
内建控制-循环语句while
scala
昕昕恋恋13 天前
定向和访问成员变量
scala
IvanCodes15 天前
七、Scala 包、样例类与样例对象
大数据·开发语言·scala
浩浩kids15 天前
Scala • basis
java·开发语言·scala