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

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

相关推荐
小冻梨1 天前
模式匹配-基础使用
scala
顧棟4 天前
JAVA、SCALA 与尾递归
java·开发语言·scala
深兰科技4 天前
坦桑尼亚与新加坡代表团到访深兰科技,促进AI在多领域的应用落地
java·人工智能·typescript·scala·perl·ai大模型·深兰科技
a程序小傲5 天前
scala中的Array
开发语言·后端·scala
kk哥88995 天前
scala 介绍
开发语言·后端·scala
17316 天前
scala中的Array
scala
满山狗尾草7 天前
map的常规操作
scala
渣渣盟8 天前
Flink实时数据写入Redis实战
大数据·scala·apache
pale_moonlight8 天前
十、Scala应用实践(下)
linux·开发语言·scala
云岫1159 天前
高贵的hasNext带着“迭代器”袭击你的大脑
scala