当前位置: 首页 > news >正文

scala课后总结(5)

Scala的面向对象思想和Java有一致性,但语法上有差异且功能更丰富。

Scala包

基本语法:使用 package 包名 来定义包。

包的三大作用 :

区分同名类:当存在多个同名类时,包可以将它们区分开来,避免命名冲突。

管理类:在类数量众多时,通过包来组织和管理类,让代码结构更清晰。

控制访问范围:可以设置包内成员的访问权限,限定哪些代码可以访问包内的类、方法等元素 。

包的命名

命名规则:包名只能由数字、字母、下划线、小圆点组成,不能以数字开头,也不能使用关键字。比如 demo.class.exec1 ( class 是关键字所以错误 )、 demo.12a (数字开头所以错误 )。

命名规范:一般采用小写字母加小圆点的形式,常见格式是 com.公司名.项目名.业务模块名  ,例如 com.zpark.oa.model  、 com.sohu.bank.order  

包说明(包语句)

Scala有两种包管理风格。一种和Java类似,每个源文件对应一个包,包名和源文件路径不强制一致,用 . 分隔表示层级,如 com.zpark.scala  。另一种是嵌套风格,像 package com{ package zpark{ package scala{ } } }

包对象

定义

在Scala里,能为每个包定义一个同名的包对象。包对象里定义的成员,是对应包下所有类(class)和单例对象(object)可共享的变量,能被直接访问。例如 package object com { val shareVal = "share" def shareMethod() = {} }  ,这里 shareVal 和 shareMethod  可在 com 包下的类和对象中直接使用。

说明

Java包管理风格下 :若采用Java的包管理方式,包对象一般定义在对应包下的 package.scala 文件中,且包对象名要和包名一致 。

嵌套包管理风格下 :要是用嵌套方式管理包,包对象可与包定义在同一文件里,但得保证包对象与包声明处于同一作用域 。例如 package com { object Outer { val out: String = "out" def main(args: Array[String]): Unit = { println(name) } } package object com { val name: String = "com" } }  , Outer 对象里能直接访问包对象 com 中定义的 name  。

导包说明

常规导入 :和Java类似,可在文件顶部用 import 导入包,这样文件里所有类都能使用导入包中的内容。

局部导入 :在需要使用相关类或对象的作用范围内进行导入即可 。比如在某个方法内导入特定包,仅在该方法内有效。

通配符导入 :使用 import java.util._  ,可导入 java.util 包下的所有类和对象 。

给类起名(重命名导入) :像 import java.util.{ArrayList=>JL}  ,将 java.util.ArrayList 导入并在当前作用域内重命名为 JL  。

导入相同包的多个类 : import java.util.{HashSet, ArrayList}  ,一次导入 java.util 包下的多个类 。

屏蔽类 : import java.util.{ArrayList => _}  ,表示导入 java.util 包下除 ArrayList 之外的其他内容 。

导入包的绝对路径 : new _root_.java.util.HashMap  ,可通过绝对路径导入类,这里 _root_  是Scala里表示根包的特殊标识 。

类和对象

类可看作模板,对象是类的具体实例 。

定义类

回顾Java中的类 :Java中若类是 public 修饰,类名必须和文件名一致,通常一个 .java 文件有一个 public 类 。而Scala没有 public 修饰,一个 .scala 文件能写多个类 。

基本语法 : [修饰符] class 类名 { 类体 }  。Scala里类默认具有公有可见性 ,无需像Java那样用 public 修饰 。

属性

基本语法 :用 [修饰符] var|val 属性名称 [: 类型] = 属性值 定义属性 。 var 定义的属性可变, val 定义的属性不可变 。使用 @BeanProperty 注解,能自动生成规范的 setXxx/getXxx 方法 。

Scala中的访问权限

说明

与Java对比:Java访问权限有 public 、 private 、 protected 和默认(包访问权限 )。Scala能通过类似修饰符实现类似效果,但存在使用差异。

Scala权限特点

默认权限:Scala中属性和方法默认访问权限为 public ,不过Scala没有 public 关键字。

 private 权限:表示私有权限,仅在类内部和伴生对象中可访问。

 protected 权限:受保护权限,Scala中比Java更严格,仅同类、子类可访问,同包其他类无法访问。

 包访问权限: private[包名] 可增加包访问权限,让指定包名下的其他类也能使用 。

Scala方法定义

基本语法:使用 def 方法名(参数列表) [: 返回值类型] = { 方法体 }  定义方法。 def 是定义方法的关键字,参数列表指定传入参数的名称和类型,返回值类型可省略(编译器能自动推导时 ),方法体包含具体执行逻辑。

创建对象

基本语法:用 val | var 对象名 [: 类型] = new 类型()  创建对象。 val 修饰的对象引用不可变(内存地址不变 ),但对象属性值可变; var 修饰的对象引用和属性值都可变 。

Scala构造器

整体概念

和Java类似,Scala创建对象需调用构造方法,且能有多个构造方法。Scala类的构造器分为主构造器和辅助构造器 。

基本语法

主构造器:定义在类名后的圆括号内,如 class 类名(形参列表) { // 主构造器 // 类体 }  ,主构造器的参数会参与类的初始化 。

辅助构造器:使用 def this(形参列表) { // 辅助构造器 }  定义,函数名固定为 this  ,可定义多个,编译器依据参数个数和类型区分 。

说明

辅助构造器特征:辅助构造器函数名是 this  ,可重载(有多个 ),靠参数个数和类型区分 。

调用规则:辅助构造方法不能独立构建对象,必须直接或间接调用主构造方法 ;构造器调用其他构造器时,被调用的构造器需先声明 。

构造器参数

说明:Scala主构造器函数的形参有三种类型 。未修饰参数是局部变量; var 修饰参数可作为类的可变成员属性; val 修饰参数是类的只读属性 。

封装

原理:封装是将数据和操作数据的方法封装,数据被保护,通过授权操作(成员方法 )访问。

Java与Scala对比:Java通过私有化属性,提供 set 和 get 方法实现封装 。Scala属性底层 public 实际是 private  ,通过 get 和 set 方法操作,不推荐照搬Java方式,但为和Java框架兼容,可用 @BeanProperty 注解生成 setXxx/getXxx 方法 。

继承和多态 - 基本语法

使用 class 子类名 extends 父类名 { 类体 }  实现继承 。子类继承父类属性和方法,Scala是单继承(一个子类只能有一个直接父类 )。

Scala 中属性和方法都是动态绑定,而Java 中只有方法为动态绑定

 

相关文章:

  • 自助建微网站宁波seo公司网站推广
  • 怎样申请做自己的网站外贸推广网站
  • 木藕设计网站大全郑州关键词排名顾问
  • 个人建网站成本营销策略4p
  • 长沙网站建设政府补贴怎么学seo基础
  • 东莞网站建设aj工作室如何编写一个网站
  • matlab 计算点云的形心
  • Flask学习笔记 - 项目结构 + 路由
  • C++11观察者模式示例
  • C语言单链表的增删改补
  • 从制造业历史来看,汽车兴,则制造业兴,则国兴,则机器视觉兴
  • 云原生与微服务的关系
  • Git 换行符警告(LF replaced by CRLF)的解决方案
  • 【无人机】PX4 飞控系统架构
  • 【Scratch编程系列】Scratch编程软件界面
  • b4a安卓开发技术和建议,VB6开发Android APK
  • AT_abc212_d [ABC212D] Querying Multiset
  • 搭建健康基石,畅享活力人生
  • 大模型 MCP:开启 AI 与现实世界的无缝交互革命
  • CSS语言的学习路线
  • Android DiaLog全屏设置,带有叉号的弹窗,这个弹窗分为两个部分,一个是主体,另一个是关闭部分。自定义布局弹窗
  • BN 层的作用, 为什么有这个作用?
  • 常见的HR面问题汇总
  • 知识图谱:知识图谱多模态推理技术详解
  • Spring Boot 中利用 Jasypt 实现数据库字段的透明加密解密
  • OBS 录屏软件 for Mac 视频录制