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

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

相关推荐
Thomas21438 小时前
scala 闭包
开发语言·后端·scala
江畔柳前堤20 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
Thomas21439 天前
Java scala 数组 链表
java·链表·scala
江畔柳前堤10 天前
消息队列:从直觉到精通的完整认知地图
开发语言·人工智能·算法·机器学习·ruby on rails·scala
hopsky24 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy0712131 个月前
scala playframework 搭建与新建controller教程
scala
lpfasd1231 个月前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer2 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头2 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19912 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala