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,一经查实,立即删除!

相关文章

[leetcode] 64. 最小路径和

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

git/gerrit使用遇到的问题

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

软件系统安全设计规范(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)

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

Linux-03

cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写 nl 显示的时候,顺道输出行号 more 一页一页的显示文件内容 less 与 more 类似,但是比 more 更好的是,他可以往前翻页 (空格翻页 退出q命令) h…

Codeforces Round 943 (Div. 3) A~E

A. Maximize? Problem - A - Codeforces 给定x求出使这个式子最大的y&#xff1a; 不用想复杂直接循环枚举即可。 #include<bits/stdc.h> using lllong long; ll n,m; void solve() {int x;std::cin>>x;ll ans0,y;for(int i1;i<x;i){if(std::__gcd(i,x)i>a…

Android 巧用putBinder方法传递大文件

使用Intent传递数据大家都知道&#xff0c;但是如果你使用Intent传递大于1Mb的数据时&#xff0c;就一定会报如下的错误&#xff1a; Caused by: android.os.TransactionTooLargeException: data parcel size 1049112 bytes 就是说你的传输数据太大了&#xff0c;当前的大小达…

价值2000元的优质产品经理证书免费考啦(含题库)

小李哥今天带来的的是Pendo家出的2张免费产品经理证书(送Credly徽章&#xff0c;可挂LinkedIn)&#xff0c;原价共计300刀(2000人民币)&#xff0c;使用小李哥文章末尾中的网址可以免费考试&#xff0c;同时小李哥给大家做了题库&#xff0c;欢迎关注小李哥领取&#xff0c;10分…

【个人博客搭建】(17)使用FluentValidation 参数校验

FluentValidation 是一个用于 .NET 的开源验证库&#xff0c;它提供了一种流畅的接口和强类型验证规则&#xff0c;使得验证逻辑表达得更加清晰和简洁。&#xff08;Apache-2.0&#xff09; FluentValidation 的主要作用包括&#xff1a; 提高代码可读性&#xff1a;通过使用 F…

谷歌推广和seo留痕具体怎么操作?

留痕跟谷歌推广其实是一回事&#xff0c;你能在谷歌上留痕&#xff0c;其实就是推广了自己的信息&#xff0c;本质上留痕就是在各大网站留下自己的记录&#xff0c;这个记录可以是品牌信息&#xff0c;联系方式&#xff0c;看你想留下什么 如果要问自己怎么操作&#xff0c;正常…

微信公众号排名 SEO的5个策略

随着微信公众号在社交媒体领域的持续发展和普及&#xff0c;如何提升公众号的搜索排名&#xff0c;成为许多运营者关注的焦点。公众号排名SEO&#xff0c;即针对微信公众号进行搜索引擎优化&#xff0c;旨在提高公众号在搜索结果中的曝光率和点击率。下面&#xff0c;我们将深入…

银行电子凭证技术规范

银行电子凭证技术规范 1 范围 本文件规定了银行电子凭证的文件、数据与样式、系统逻辑框架、生成、通信传输和安全要求&#xff0c;以 及验证方法。 本文件适用于银行电子凭证数据实例与版式文件的开具、传输、接收和应用。 2 规范性引用文件 下列文件中的内容通过文中的规范…

如何复制本地docker镜像到其他主机

&#xff08;1&#xff09;打包镜像 比如我要复制的镜像是grafana的镜像 docker images 这里我把打包的镜像放在了根~目录下&#xff0c;如截图所示&#xff1a; docker save grafana/grafana:latest -o ~/grafana.jar &#xff08;2&#xff09;移动镜像 scp命令拷贝镜像到目标…