16_Scala面向对象编程_函数

文章目录

  • 1.声明Scala函数
  • 2.访问伴生对象
  • 3.空对象直接用的方法
  • 4.构造对象
    • --通过object获取单例对象
    • --直接new
    • --scala独有apply()方式
    • --scala有参构造
    • --scala构造方法两大类
      • 使用辅构造如下
      • 上述代码主构造为
      • 辅助构造方法甚至可以多个
      • 多个辅助构造形参内容不能重
      • 不使用辅助构造和使用辅助构造区别
      • 主构造函数属性使用this访问,辅助构造函数属性使用属性名访问
    • 主构造私有化构建对象
  • 小结
  • Appendix

1.声明Scala函数

抛出问题:创建两个类,互为伴生对象,当我new时候,然后调用,我调用的是谁?

object Solution {def main(args: Array[String]): Unit = {var user=  new Useruser.test()   //class test}class User{def test(): Unit = {println("class test")}}object User{def test(): Unit = {println("object test")}}
}

在这里插入图片描述

2.访问伴生对象

伴生对象章节已经讲过;伴生对象中放的一般都是静态方法或属性或工具类,访问的话直接 类名.方法即可

User.test()   //静态方式访问,直接类.方法

且可以继续简化

User test	  //也就是伴生对象的访问方式

3.空对象直接用的方法

object类中的方法都可以使用;

在这里插入图片描述

scala提供的一些方法都可以使用

在这里插入图片描述

重点

//    判断是否是父类实例println(user.isInstanceOf[User])//      将普通对象 转化 目标对象val value = user.asInstanceOf[Object]println(value)    //_15Scala方法.Solution$User@19bb089b     //至此不能使用user的方法了

4.构造对象

–通过object获取单例对象

//    1.1直接使用object构建对象println(Solution01)   

//_15Scala方法.Solution01$@19bb089b 打印的就是一个对象地址,直接可以拿来使用

在这里插入图片描述

反编译以后得到的是静态代码块直接实例化对象且仅有一份,私有化Instance方法,创建一个公共的本类型的私有化对象;通过类名访问;

–直接new

//    1.2直接new
val user = new User

–scala独有apply()方式

//    1.3Scala独有方式      object伴生对象,且对象中存在apply方法即可使用      繁琐
val user1 = User.apply() //如果

在这里插入图片描述

目前我的编译器已经无法动态识别apply()
不建议使用

在这里插入图片描述

在这里插入图片描述

最终结果:

在这里插入图片描述

–scala有参构造

概念:

scala默认是无参构造

如果给类传递任何参数,scala会默认抹杀掉任何构造方法仅保留一份构造方法,与类的声明一致;

//    --有参构造val zhangsan = new EMP("sad");
//    val zhangsan1 = new EMP   //构造方式不对class EMP(name:String){}

–scala构造方法两大类

  • 主构造 -> 完成类的初始化

    • 辅助构造有重载概念,主构造没有
  • 辅构造 -> 完成类的辅助功能,属性赋值

    • 辅构造方法必须直接或见解调用主构造方法
    • 使用this声明
    • 辅助构造有重载概念,主构造没有

使用辅构造如下

class FuGenerate(){//定义一下空构造的内容println("空构造方法体")def this(name:String){this()  //必须直接或间接调用主构造方法    FuGenerate()    调用一次执行空构造println("辅助构造完成")}
}

上述代码主构造为

FuGenerate()

scala中函数就是方法

辅助构造方法甚至可以多个

在这里插入图片描述

上述第二个辅助构造方法使间接调用主构造器 ,也就是先调用name:String		然后通过第一个辅助构造方法调用this()	主构造方法

多个辅助构造形参内容不能重

在这里插入图片描述

不使用辅助构造和使用辅助构造区别

在这里插入图片描述

在这里插入图片描述

主构造函数属性使用this访问,辅助构造函数属性使用属性名访问

在这里插入图片描述

主构造函数的形参就是 类的属性;直接拿this关键字访问即可;

主构造私有化构建对象

主构造私有化,形参前假如private

在这里插入图片描述

一旦私有化,子类无法进行访问,原因是无法显示的调用父类构造器

私有化后如何创建对象

–使用辅助构造器

在这里插入图片描述

使用辅助构造器,传入name,再将name赋值给主构造

–使用伴生对象(伴生对象可以访问类中私有内容)

在这里插入图片描述

小结

1.类和伴生对象访问方式	类访问实例化对象user,通过实例化对象访问伴生对象访问直接类名访问2.scala函数在编译的时候都会发生改变与定义有所不同,例如eq 编译阶段都会编程equals,但是方法m编译阶段不会发生改变例如equals3.scala的构建对象的方式--直接new       scala中独有方式  val user = User.apply()--反射构建--clone--反序列化      磁盘中对象写入到内存构建对象--scala使用object构建单例对象4.注意scala中类名和方法名相同但是并不代表其是构造方法;
5.scala是强数据类型,完全面向函数式编程语言   ==>   声明类 == 声明函数6.如果给类传递任何参数,scala会默认抹杀掉任何构造方法仅保留一份构造方法,与类的声明一致;7.使用辅助构造使代码更加灵活,形式上和Java一致
--必须调用主构造,会执行方法体(类中代码语句)所有
--this声明
--可以多个

在这里插入图片描述

类{}包的是函数体,甚至可以直接println,和Java类中五大成分不同。函数体new几次执行几次;

Appendix

对象创建在实例化之后会发生如下情况

在这里插入图片描述

在这里插入图片描述

为了避免此情况,请尽可能将类放的远一点,以至于先定义 变量,后实例化对象赋值;

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

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

相关文章

EasyExcel导出工具类

目录 工具类 头部实体类&#xff08;要和工具类在同一个module或项目下&#xff09; 日期转换器 工具类 /*** 导出Excel工具类*/ public class EasyExcelUtil<T> {/*** 单sheet&#xff08;Map写入&#xff09;* param response 响应对象* param headList 头部集合* p…

Redis(五) Redis锁

结合前四期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) Redis(二) 可编程性(Redis(二) 可编程性-CSDN博客) Redis(三) 事务与发布订阅(Redis(三) 事务与发布订阅-CSDN博客) Redis(四) 主从、哨兵、集群环境搭建(Redis(四) 主从、哨兵、集群环境搭建-CSDN博客) (本文代…

[leetcode] 64. 最小路径和

文章目录 题目描述解题方法动态规划java代码复杂度分析 相似题目 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#…

有什么好用的思维导图软件?6个软件教你快速进行思维导图的制作

有什么好用的思维导图软件&#xff1f;6个软件教你快速进行思维导图的制作 以下是六款常用且功能强大的思维导图软件&#xff0c;它们可以帮助您快速制作思维导图&#xff1a; 迅捷画图: 迅捷画图是一款在线思维导图工具&#xff0c;具有直观易用的界面和丰富的功能。用户可…

智驾重感知轻地图路线

1、前言 在自动驾驶中使用HD Map的优点显而易见&#xff1a;超视距感知能力、高精度、高丰富度。其局限性同样很明显&#xff1a;高成本、高覆盖度、低鲜度、受限法规等。比如&#xff0c;2022年&#xff0c;在地图法规收紧&#xff0c;和感知能力增强的双重背景下&#xff0c;…

你对后端系统的安全性有何理解

人生难免经受挫折 风雨过后就是彩虹 生活难免遭受苦难 雨过天晴终有阳光 一、后端安全性 后端安全性是指在开发和运行后端应用程序时&#xff0c;确保应用程序和其中存储的数据免受恶意攻击和不当访问的能力。以下是我对后端安全性的理解&#xff1a; 1. 认证和授权&#xff1a…

C# Solidworks二次开发:枚举应用实战(第十一讲)

大家好&#xff0c;今天继续介绍我们的枚举应用系列。 下面是今天要介绍的枚举值&#xff1a; &#xff08;1&#xff09;第一个为swsPVResultCombinationError_e&#xff0c;这个枚举值的含义为结合压力容器设计研究结果时的错误&#xff0c;下面是官方的具体枚举值&#xf…

sudo权限

目录 1.创建普通用户 2.修改sudo配置文件 3.加入用户组 4.测试 1.创建普通用户 useradd daboluopasswd daboluo 2.修改sudo配置文件 vim /etc/sudoers ## Allow root to run any commands anywhere root ALL(ALL) ALL daboluo ALL(ALL) ALL#添加此行后…

[力扣题解]225. 用队列实现栈

题目&#xff1a;225. 用队列实现栈 思路 用一个队列模拟栈&#xff1b; 假设有数字&#xff1a;1&#xff0c;2&#xff0c;3&#xff1b; pop 队列里是这样的存的&#xff1a;3&#xff0c;2&#xff0c;1&#xff1b; 作为一个栈&#xff0c;应该弹出最后进来的那一个3&…

武汉星起航:策略升级,亚马逊平台销售额持续增长显实力

武汉星起航电子商务有限公司&#xff0c;一家致力于跨境电商领域的企业&#xff0c;于2023年10月30日在上海股权托管交易中心成功挂牌展示&#xff0c;这一里程碑事件标志着公司正式踏入资本市场&#xff0c;开启了新的发展篇章。公司董事长张振邦在接受【第一财经】采访时表示…

Layer1 公链竞争破局者:Sui 生态的全面创新之路

随着 Sui 生态逐渐在全球范围内树立起声望&#xff0c;并通过与 Revolut 等前沿金融科技平台合作&#xff0c;推广区块链教育与应用&#xff0c;Sui 生态的未来发展方向已成为业界瞩目的焦点。如今&#xff0c;Sui 的总锁定价值已攀升至 5.93 亿美元&#xff0c;充分展示了其在…

考虑需求响应的微网优化调度模型【粒子群算法】【matlab】

目录 1 主要内容 1.1 模型约束条件 1.2 粒子群算法优化过程 2 部分代码 3 效果图 4 下载链接 1 主要内容 该模型构建了考虑需求响应的微电网优化调度模型&#xff0c;并采用粒子群算法&#xff08;PSO&#xff09;进行优化求解&#xff0c;模型主体有储能、风电、光伏、微…

兄弟Brother数控机床网络IP配置设置教程

1、进入通讯参数页面 首先按下面板的数据库按钮&#xff1a; 按F6&#xff0c;选择通信参数&#xff1a; 2、调整网络和远程访问参数 数据改写&#xff08;从属&#xff09;从否改为是&#xff0c;远程操作从无效改为有效&#xff1a; 更改ip地址、网关、子网掩码等&#xff…

pcm转MP3怎么转?只需3个步骤~

PCM&#xff08;Pulse Code Modulation&#xff09;是一种用于数字音频编码的基础技术&#xff0c;最早起源于模拟音频信号数字化的需求。通过PCM&#xff0c;模拟音频信号可以被精确地转换为数字形式&#xff0c;为数字音频的发展奠定了基础。 MP3文件格式的多个优点 MP3的优…

面试二十五、remove和earse的区别

vector中erase的作用是删除掉某个位置position或一段区域&#xff08;begin, end)中的元素&#xff0c;减少其size&#xff0c;返回被删除元素下一个元素的位置。 vector中remove的作用是将范围内为val的值都remove到后面&#xff0c;返回新的_last值&#xff08;非val部分的en…

LeetCode-741. 摘樱桃【数组 动态规划 矩阵】

LeetCode-741. 摘樱桃【数组 动态规划 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;动态规划&#xff0c;定推初遍举。解题思路二&#xff1a;倒序循环解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个 n x n 的网格 grid &#xff0c;代表一块樱桃地&#xff0…

git/gerrit使用遇到的问题

Push时出现的多个问题及其解决 branch【...】not found 这个错误通常出现在 Git 命令中指定的分支名称中包含特殊字符或者语法错误时。需要确保指定的分支名称是正确的&#xff0c;并且没有任何不支持的字符。 例如&#xff0c;如果分支名称是 feature/branch&#xff0c;应该…

软件系统安全设计规范(word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件资料清单列表部分文档…

亚马逊云科技产品测评:玩转云服务器(EC2)

文章目录 &#x1f4d1;引言一、亚马逊发展历史介绍二、云服务器资源地域分布三、云服务器实例规格四、EC2计费模式五、亚马逊免费EC2领取 &#x1f4d1;引言 亚马逊&#xff1a;世界上最大的云服务器提供商 亚马逊云科技 是由亚马逊公司提供的一系列云计算服务。它提供了弹性计…

[Flutter]配置pubspec.yaml

pubspec.yaml 文件是 Dart 和 Flutter 项目的核心配置文件&#xff0c;用于管理项目的依赖、版本、元数据等。 下面是 pubspec.yaml 文件中常见项的示例和说明&#xff1a; name: my_private_package #version: 0.0.1 # 开发一个Dart包或Flutter库&#xff0c;用于其他项目引用…