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"
   }
}
相关推荐
栈与堆15 分钟前
数据结构篇(1) - 5000字细嗦什么是数组!!!
java·开发语言·数据结构·python·算法·leetcode·柔性数组
C雨后彩虹7 小时前
任务最优调度
java·数据结构·算法·华为·面试
一条大祥脚10 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
cpp_250112 小时前
P2708 硬币翻转
数据结构·c++·算法·题解·洛谷
程序猿阿伟12 小时前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法
UIUI13 小时前
list_for_each_entry
linux·数据结构·链表
豆沙沙包?16 小时前
2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版
java·数据结构·链表
Python_Study202517 小时前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构
SmoothSailingT18 小时前
408每日一题——数据结构
数据结构·考研·408
im_AMBER21 小时前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表