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 采用了特质叠加的策略。

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

相关推荐
李白的天不白9 天前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉11 天前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala
那晚的她11 天前
Scala中Set集合
开发语言·后端·scala
IvanCodes11 天前
二、Scala流程控制:分支与循环
大数据·scala
Veggie2611 天前
【Scala PyTorch深度学习】PyTorch On Scala系列课程 第十四章 29 PyTorch模型扩展自定义Module【AI Infra3】[PyTorch Scala硕士研一课程】
人工智能·深度学习·scala
Clf丶忆笙11 天前
搭建支持多语言开发的Quarkus环境:Java、Kotlin与Scala全栈指南
java·开发语言·云原生·kotlin·scala·quarkus
IvanCodes11 天前
四、Scala深入面向对象:类、对象与伴生关系
开发语言·后端·scala
嗯.~11 天前
scala的泛型应用场景
开发语言·后端·scala
醉颜凉11 天前
Scala Cats Effect纯函数式并发编程:从Fiber模型到生产级应用
大数据·网络·scala
2601_9611940213 天前
考研学校专业课真题
spring boot·考研·eclipse·log4j·scala·symfony