Scala 面向对象编程总结

​​​抽象属性和抽象方法

基本语法

  1. 定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类
  2. 定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性
  3. 定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法

案例实操

Scala 复制代码
abstract class Person {
   val name: String 
   def hello(): Unit
}

   val name: String = "teacher" 

   def hello(): Unit = {
   println("hello teacher")
   }
}
单例对象(伴生对象)

单例对象‌:Scala 中没有静态的概念,但提供了单例对象来模拟类对象。若单例对象名与类名一致,则称为该类的伴生对象。

伴生对象语法 ‌:使用 object 关键字声明,伴生对象对应的类称为伴生类。

apply 方法 ‌:通过伴生对象的 apply 方法,可以实现不使用 new 关键字创建对象。如果想让主构造器私有,可以在 () 前加 private

案例实操

Scala 复制代码
//(1)伴生对象采用 object 关键字声明
object Person {
   var country: String = "China"
}

//(2)伴生对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。
class Person {
  var name: String = "bobo"
}

object Test {
   def main(args: Array[String]): Unit = {
       //(3)伴生对象中的属性和方法都可以通过伴生对象名(类名)直接调用访
问。
       println(Person.country)
   }
}
特质

**特质(Trait)**‌:Scala 中用特质来代替接口的概念,一个类可以混入(mixin)多个特质。

特质声明 ‌:使用 trait 关键字声明,特质中可以包含抽象方法和具体方法。

特质基本语法 ‌:一个类继承特质时使用 extends 关键字,如果同时继承多个特质或父类,使用 with 关键字连接。

动态混入‌:创建对象时混入特质,而无需使类混入该特质。

特质叠加‌:解决多个混入特质中的方法冲突问题,Scala 采用了特质叠加的策略。

类型检查和转换

类型检查 ‌:使用 isInstanceOf[T] 判断对象是否为某个类型,使用 asInstanceOf[T] 将对象强制转换为某个类型。

classOf‌:获取对象的类名。

案例实操‌

Scala 复制代码
trait PersonTrait {

   // 声明属性
   var name:String = _

  // 声明方法
  def eat():Unit={

  }

  // 抽象属性
  var age:Int

  // 抽象方法
  def say():Unit
}
定义新类型

type 关键字 ‌:使用 type 关键字可以定义新的数据类型名称,本质上就是类型的一个别名。

Scala 复制代码
object Test {

   def main(args: Array[String]): Unit = 
   
       { type S=String
       var v:S="abc"
       def test():S="xyz"
   }
}
相关推荐
CSharp精选营4 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假7 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠8 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦15 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠16 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82116 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q16 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒16 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记16 天前
单项不带头不循环链表
数据结构·链表