版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
scala类和对象2知识目标Scala各类数组的学习01能力目标掌握Scala各类数组的使用和定义02学习目标3目录0102初识类和对象类03对象初识类和对象4Scala的类与Java的类具有非常多的相似性,示例代码如下://1.在scala中,类不需要用public声明,所有的类都具有公共的可见性classPerson{//2.声明私有变量,用var修饰的变量默认拥有getter/setter属性privatevarage=0//3.如果声明的变量不需要进行初始赋值,此时Scala就无法进行类型推断,所以需要显式指明类型privatevarname:String=_//4.定义方法,应指明传参类型。返回值类型不是必须的,Scala可以自动推断出来,但是为了方便
调用者,建议指明defgrowUp(step:Int):Unit={age+=step}初识类和对象5//5.对于改值器方法(即改变对象状态的方法),即使不需要传入参数,也建议在声明中包含()defgrowUpFix():Unit={age+=10}//6.对于取值器方法(即不会改变对象状态的方法),不必在声明中包含()defcurrentAge:Int={age}/***7.不建议使用return关键字,默认方法中最后一行代码的计算结果为返回值
*如果方法很简短,甚至可以写在同一行中
*/defgetName:String=name}变长数组6//伴生对象objectPerson{defmain(args:Array[String]):Unit={//8.创建类的实例valcounter=newPerson()//9.用var修饰的变量默认拥有getter/setter属性,可以直接对其进行赋值counter.age=12counter.growUp(8)counter.growUpFix()//10.用var修饰的变量默认拥有getter/setter属性,可以直接对其进行取值,输出:30println(counter.age)//输出:30println(counter.currentAge)//输出:nullprintln(counter.getName)}}类-成员变量可见性7Scala中成员变量的可见性默认都是public,如果想要保证其不被外部干扰,可以声明为private,并通过getter和setter方法进行访问。类-getter和sette属性8getter和setter属性与声明变量时使用的关键字有关:使用var关键字:变量同时拥有getter和setter属性;使用val关键字:变量只拥有getter属性;使用private[this]:变量既没有getter属性、也没有setter属性,只能通过内部的方法访问;需要特别说明的是:假设变量名为age,则其对应的get和set的方法名分别叫做
age
和
age_=。代码如下:Getter和sett属性9classPerson{privatevalname="heibaiying"privatevarage=12private[this]varbirthday="2019-08-08"//birthday只能被内部方法所访问defgetBirthday:String=birthday}objectPerson{defmain(args:Array[String]):Unit={valperson=newPersonperson.age=30println()println(person.age)println(person.getBirthday)}}示例代码中
person.age=30
在执行时内部实际是调用了方法
person.age_=(30)
,而
person.age
内部执行
时实际是调用了
person.age()
方法。主构造器10和Java不同的是,Scala类的主构造器直接写在类名后面,但注意以下两点:主构造器传入的参数默认就是val类型的,即不可变,你没有办法在内部改变传参;写在主构造器中的代码块会在类初始化的时候被执行,功能类似于Java的静态代码块
static{}代码如下:主构造器11classPerson(valname:String,valage:Int){println("功能类似于Java的静态代码块static{}")defgetDetail:String={//name="heibai"无法通过编译name+":"+age}}objectPerson{defmain(args:Array[String]):Unit={valperson=newPerson("heibaiying",20)println(person.getDetail)}}classPerson(valname:String,valage:Int){println("功能类似于Java的静态代码块static{}")defgetDetail:String={//name="heibai"无法通过编译name+":"+age}}objectPerson{defmain(args:Array[String]):Unit={valperson=newPerson("heibaiying",20)println(person.getDetail)}}输出:功能类似于Java的静态代码块static{}输出结果:heibaiying:20辅助构造器12辅助构造器有两点硬性要求:辅助构造器的名称必须为this;每个辅助构造器必须以主构造器或其他的辅助构造器的调用开始。classPerson(valname:String,valage:Int){privatevarbirthday=""//1.辅助构造器的名称必须为thisdefthis(name:String,age:Int,birthday:String){//2.每个辅助构造器必须以主构造器或其他的辅助构造器的调用开始this(name,age)this.birthday=birthday}//3.重写toString方法overridedeftoString:String=name+":"+age+":"+birthday}objectPerson{defmain(args:Array[String]):Unit={println(newPerson("heibaiying",20,"2019-02-21"))}}方法传参不可变13在Scala中,方法传参默认是val类型,即不可变,这意味着你在方法体内部不能改变传入的参数。这和Scala的设计理念有关,Scala遵循函数式编程理念,强调方法不应该有副作用,参考代码如下:classPerson(){deflow(word:String):String={word="word"//编译无法通过word.toLowerCase}}对象14Scala中的object(对象)主要有以下几个作用:因为object中的变量和方法都是静态的,所以可以用于存放工具类;可以作为单例对象的容器;可以作为类的伴生对象;可以拓展类或特质;可以拓展Enumeration来实现枚举工具类&单例&全局静态常量&拓展特质15这里我们创建一个对象
Utils,代码如下objectUtils{/**1.相当于Java中的静态代码块static,会在对象初始化时候被执行
*这种方式实现的单例模式是饿汉式单例,即无论你的单例对象是否被用到,
*都在一开始被初始化完成
*/valperson=newPerson//2.全局固定常量等价于Java的publicstaticfinalvalCONSTANT="固定常量"//3.全局静态方法deflow(word:String):String={word.toLowerCase}}工具类&单例&全局静态常量&拓展特质16其中Person类代码如下:classPerson(){println("Person默认构造器被调用")}工具类&单例&全局静态常量&拓展特质17新建测试类,代码如下://1.ScalaApp对象扩展自traitAppobjectScalaAppextendsApp{//2.验证单例println(Utils.person==Utils.person)//3.获取全局常量println(Utils.CONSTANT)//4.调用工具类println(Utils.low("ABCDEFG"))}//输出如下:Person默认构造器被调用true固定常量abcdefg伴生对象18在Java中,你通常会用到既有实例方法又有静态方法的类,在Scala中,可以通过类和与类同名的
伴生对象来实现。类和伴生对象必须存在与同一个文件中,代码如下:classPerson(){privatevalname="HEIBAIYING"defgetName:String={//调用伴生对象的方法和属性Person.toLow(Person.PREFIX+name)}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版垫资赎楼业务风险控制合同2篇
- 2024电商技术服务合同3篇
- 2024年版市区高级公寓租赁合同版B版
- 2025年度玩具OEM贴牌加工安全标准合同3篇
- 2025年房屋贷款延期合同3篇
- 二零二五年度火锅店餐饮服务承包合同范本2篇
- 二零二五年度跨境电商产业园房地产收购合同3篇
- 2024版打胶合同书
- 二零二五年度智能机器人OEM委托研发与市场拓展合同
- 西南科技大学《西方音乐史(二)》2023-2024学年第一学期期末试卷
- 2025年工程合作协议书
- 2025年山东省东营市东营区融媒体中心招聘全媒体采编播专业技术人员10人历年高频重点提升(共500题)附带答案详解
- 2025年宜宾人才限公司招聘高频重点提升(共500题)附带答案详解
- 六年级下册第四单元语文园地-语文园地四-学习任务单
- 《新闻采访写作》课程思政优秀教学案例(一等奖)
- 竣工验收程序流程图
- 清华经管工商管理硕士研究生培养计划
- 口腔科诊断证明书模板
- 管沟挖槽土方计算公式
- 国网浙江省电力公司住宅工程配电设计技术规定
- 烟花爆竹零售应急预案
评论
0/150
提交评论