6 scala-面向对象编程基础

news2024/10/5 19:18:26

Scala 跟 Java 一样,是一门面向对象编程的语言,有类和对象的概念。

1 类与对象

与 Java 一样,Scala 也是通过关键字 class 来定义类,使用关键字 new 创建对象。

要运行我们编写的代码,同样像 Java 一样,需要一个 main 方法作为程序启动的入口。

我们知道,在 Java 中,main 方法是一个静态方法,但在 Scala 中,並沒有静态方法和静态属性。在 Scala 中,定义在单例对象 object 中的方法和属性就等价于 Java 中的静态方法和静态属性。

下面定义一个没有任何方法与属性的球员信息类,并在创建该类对象。

class FootballPlayer { }

object App {
  def main(args: Array[String]): Unit = {
    print(new FootballPlayer())
  }
}

运行后,控制台打印 FootballPlayer@4cf777e8

2 成员变量

在定义类时,可以通过 valvar 定义类的成员变量。

valvar 的区别在于,val 定义的变量在初始化后就不能被改变,这类似于 Java 中的 final

下面例子,创建一个球员类,包含姓名、年龄、所在俱乐部,最后在 main 方法中打印球员对象信息:

class PlayerInfo {
  var playerName: String = "沙拿"
  var age: Int = 31
  var club: String = "利物浦"
}

object App {
  def main(args: Array[String]): Unit = {
    val playerInfo = new PlayerInfo
    println(s"初始化球员是在${playerInfo.club}${playerInfo.playerName},今年${playerInfo.age}岁")

    playerInfo.playerName = "孙兴慜"
    playerInfo.age = 30
    playerInfo.club = "热刺"
    println(s"您选择的球员是在${playerInfo.club}${playerInfo.playerName},今年${playerInfo.age}岁")
  }
}

运行后,在控制台打印:

初始化球员是在利物浦的沙拿,今年31岁
您选择的球员是在热刺的孙兴慜,今年30岁

3 成员变量初始化值

在编写 Java 类时,如果我们不给成员变量指定默认值,那么对于基本类型,如 int、long、short、float、long 则初始化值为 0,引用类型为 null。

但在 Scala 中,如果不给成员变量指定默认值,就会出现编译错误:

在这里插入图片描述
编译器告诉我们,有3个未初始化的成员变量。

我们可以使用下划线 _ 初始化成员变量,例如:

class PlayerInfo {
  var playerName: String = _
  var age: Int = _
  var club: String = _
}

object App {
  def main(args: Array[String]): Unit = {
    val playerInfo = new PlayerInfo
    println(s"初始化球员是在${playerInfo.club}${playerInfo.playerName},今年${playerInfo.age}岁")
  }
}

运行程序,控制台打印:

初始化球员是在null的null,今年0岁

可以得出这样的结论:定义成员变量时,需要使用 _ 初始化成员变量,初始化规则跟 Java 一致,int、long、short、float、long 则初始化值为 0,引用类型为 null。

4 成员方法

我们可以使用关键字 def 为类定义方法。例如,我们为球员类添加一个 hello 方法:

class PlayerInfo {
  var playerName: String = _
  var age: Int = _
  var club: String = _

  def hello(): String = {
    s"Hey buddy, I am ${this.playerName} of ${this.club}, ${this.age} years old!"
  }
}

object App {
  def main(args: Array[String]): Unit = {
    val playerInfo = new PlayerInfo
    playerInfo.playerName = "Cristiano Ronaldo"
    playerInfo.age = 39
    playerInfo.club = "Al-Nassr FC"
    println(playerInfo.hello())
  }
}

运行程序,控制台输出:

Hey buddy, I am Cristiano Ronaldo of Al-Nassr FC, 39 years old!

5 访问修饰符

Scala 也可以使用访问修饰符对成员变量、方法的访问进行控制:

5.1 public

Scala 没有 public 修饰符,因为,不加修饰符的属性和方法就是 public,即,在任何地方,类、属性、方法都可以被访问

5.2 private

5.2.1 修饰类

private 修饰的类可在当前包共生对象 被访问:
在这里插入图片描述

5.2.2 修饰成员变量或方法

private 修饰的成员变量、方法,只能在当前类共生对象 中访问:
在这里插入图片描述

5.2.3 private[this]

private[this] 修饰的属性和方法,只能在本类中被引用,共生对象也不能引用。

5.2.4 private[包名]

默认情况下,子包是无法访问被 private 修饰的 属性和方法的:
在这里插入图片描述
当我们需要在当前包及子包中共享类的属性和方法时,我们可以使用 private[包名],其中包名为当前类所在的包,表示,被修饰的目标可以在当前包和子包中被访问:
在这里插入图片描述

5.3 protected

与 Java 的 protect 不同,在 Scala 中被 protected 修饰的属性、方法,只能被当前类,子类访问。

在 Java 中,被 protect 修饰的属性和方法可以被同包下的类访问,但在 Scala 中,被 protected 修饰的属性和方法不能被同包类访问。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1444224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,最大公共子序列(LCS,Longest Common Subsequences)的算法与源代码

1 最大公共子序列 最长的常见子序列问题是寻找两个给定字符串中存在的最长序列。 最大公共子序列算法&#xff0c;常用于犯罪鉴定、亲子鉴定等等的 DNA 比对。 1.1 子序列 让我们考虑一个序列S<s1&#xff0c;s2&#xff0c;s3&#xff0c;s4&#xff0c;…&#xff0c;…

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D &#xff0c; 任务 &#xff1a;宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel&#xff0c; 命名为PlayerInfo 新建Image&#xff0c;作为头像 新建Slider&#xff0c;作为血条 对Panel组件添加一个水…

中年低端中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安

文章大纲 旅途规划来回行程的确定南宁 - 北海 - 湛江轮渡成为了最终最大的不确定性&#xff01;感谢神州租车气温与游玩地点总体花费 游玩过程出发时间&#xff1a;Day1-1月25日星期四&#xff0c;西安飞南宁路途中&#xff1a;Day2-1月26日星期五&#xff0c;南宁-湛江-住雷州…

算法学习——LeetCode力扣二叉树篇1

算法学习——LeetCode力扣二叉树篇1 144. 二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 描述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&a…

猫头虎分享已解决Bug | Kotlin Error: Unresolved reference: name

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Java多态原理

参考 虚方法 JVM杂记&#xff1a;对多态实现原理、虚方法表、虚方法、静态解析、动态链接的一些思考_多态和方法表的关系-CSDN博客 静态分派与动态分派 &#xff08;JVM&#xff09;Java虚拟机&#xff1a;静态分派 & 动态分派 原理解析 - 掘金 虚方法表 JVM 栈帧&am…

python+flask+django医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具…

python 基础知识点(蓝桥杯python科目个人复习计划35)

今日复习计划&#xff1a;阶段总结&#xff08;新年贺礼&#xff09; 1.python简介&#xff08;定义&#xff0c;优点&#xff0c;缺点&#xff0c;应用领域&#xff09; python&#xff1a;一种广泛使用的解释型&#xff0c;高级和通用的编程语言 python极简&#xff0c;生…

猫头虎分享已解决Bug || KeyError: ‘The truth value of a Series is ambiguous‘

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【MySQL】-12 MySQL索引(上篇MySQL索引类型前置-1)

MySQL索引 索引1 索引基础2 索引与优化1 选择索引的数据类型1.1 选择标识符 2 索引入门2.1 索引的类型2.1.1 B-Tree索引2.1.2 Hash索引2.1.3 空间(R-Tree)索引2.1.4 全文(Full-text)索引 索引的优点&#xff1a;索引是最好的解决方案吗&#xff1f; 索引 索引&#xff08;在MYS…

08-OpenFeign-结合Sentinel,实现熔断降级

当我们在对服务远程调用时&#xff0c;会因为服务的请求超时、抛出异常等情况&#xff0c;导致调用失败。 如果短时间内&#xff0c;产生大量请求异常。引发上游的调用方请求积压&#xff0c;最终会引起整个调用链雪崩。 为此我们需要对核心的调用过程进行监控&#xff0c;当…

前端JavaScript篇之ajax、axios、fetch的区别

目录 ajax、axios、fetch的区别AjaxAxiosFetch总结注意 ajax、axios、fetch的区别 在Web开发中&#xff0c;ajax、axios和fetch都是用于与服务器进行异步通信的技术&#xff0c;但它们在实现方式和功能上有所不同。 Ajax 定义与特点&#xff1a;Ajax是一种在无需重新加载整个…

深度学习(14)--x.view()详解

在torch中&#xff0c;常用view()函数来改变tensor的形状 查询官方文档&#xff1a; torch.Tensor.view — PyTorch 2.2 documentationhttps://pytorch.org/docs/stable/generated/torch.Tensor.view.html#torch.Tensor.view示例 1.创建一个4x4的二维数组进行测试 x torch.…

开局一个破碗的故事例子

在一个寒冷的冬日&#xff0c;一个瘦弱的小姑娘拿着一个破碗&#xff0c;孤独地走在被白雪覆盖的街道上。她的名字叫小梅&#xff0c;她的父母早逝&#xff0c;留下她一个人在这个世界上艰难地生活。 小梅的破碗里只有几个铜板&#xff0c;那是她前一天沿街乞讨所得&#xff0c…

Windows Server 2019 搭建并加入域

系列文章目录 目录 系列文章目录 文章目录 前言 一、域是什么&#xff1f; 二、配置服务器 1.实验环境搭建 1)实验服务器配置和客户端 2)实验环境 2.服务器配置 账户是域服务器的账户和密码 文章目录 Windows Server 2003 Web服务器搭建Windows Server 2003 FTP服务器搭…

python健身房管理系统 django健身课程预约系统

系统所要实现的功能分析&#xff0c;对于现在网络方便的管理&#xff0c;系统要实现用户可以直接在平台上进行查看首页、健身课程、留言板、个人中心、后台管理等&#xff0c;根据自己的需求可以进行查看健身课程&#xff0c;这样既能节省用户的时间&#xff0c;不用在像传统的…

Learn LaTeX 015 - LaTex Typeset 抄录

https://www.douyin.com/user/self?modal_id7306721102380764453&showTabpost GitHub address: https://github.com/yasenstar/learn_latex Gitee address: https://gitee.com/yasenstar/learn_latex

【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

嵌入式系统:挑战与机遇并存的领域

嵌入式系统&#xff1a;挑战与机遇并存的领域嵌入式系统是一个既具有挑战性又充满前景的领域。要成为一名合格的嵌入式系统工程师&#xff0c;需要经过大量的学习和实践。然而&#xff0c;进入这个领域时&#xff0c;刚入行可能会面临许多困境。让我们一起探讨一下嵌入式系统工…

CPU和GPU有什么区别,玩游戏哪个更重要?

大家好&#xff01;今天我们要聊的话题是CPU和GPU&#xff0c;它们在电脑中扮演着重要的角色&#xff0c;虽然看起来只是两个简单的缩写&#xff0c;但它们的功能和影响是截然不同的&#xff01; 那么&#xff0c;究竟CPU和GPU有什么区别呢&#xff1f;在玩游戏时&#xff0c;…