Scala面向对象.docx

上传人:A*** 文档编号:141375813 上传时间:2020-08-07 格式:DOCX 页数:26 大小:293.93KB
返回 下载 相关 举报
Scala面向对象.docx_第1页
第1页 / 共26页
Scala面向对象.docx_第2页
第2页 / 共26页
Scala面向对象.docx_第3页
第3页 / 共26页
Scala面向对象.docx_第4页
第4页 / 共26页
Scala面向对象.docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Scala面向对象.docx》由会员分享,可在线阅读,更多相关《Scala面向对象.docx(26页珍藏版)》请在金锄头文库上搜索。

1、Scala面向对象Scala面向对象一.关于package 1.包的管理方式 2.包对象 3.导包说明二.类和对象 1.定义类 2.属性三.封装 1.权限访问 2.方法 3.创建对象 4.构造器 5.构造器参数四.继承五.抽象属性和抽象方法 1.基本语法 2.继承&重写 3.匿名子类六.多态七.单例对象(伴生对象) 1.单例对象语法 2.伴生对象的apply方法 3.创建对象的方式总结八.Trait:特质 1.特质声明 2.特质继承 3.特质叠加* 4.特质叠加执行顺序 5.特质自身类型 6.特质和抽象类的区别九.其他 1.类型检查和转换 2.枚举类和应用类 3.Type定义新类型Scala的

2、面向对象思想和Java的面向对象思想和概念是一致的,但Scala语法和Java不同,补充了更多的功能。一.关于package1.包的管理方式Scala有两种包的管理风格: 1)和Java的包管理风格相同,每个源文件一个包,包名用“.”进行分隔以表示包的层级关系,如com.example.scala 包名和源文件所在路径不要求必须一致 2)另一种风格,通过嵌套的风格表示层级关系,如下package com package example package scala object Test def main(args: ArrayString): Unit = println(Hello Worl

3、d!) 包名和源文件所在路径不要求必须一致: 将以上代码复制到Test.scala文件中 scalac编译第二种风格有以下特点: 1)一个源文件中可以声明多个package 2)子包中的类可以直接访问父包中的内容,而无需导包 3)父包访问子包需要导包package com /导包语句可以出现在程序的任意位置 import com.example.Inner /父包访问子包需要导包 /外层包中的类 object Outer val out: String = out def main(args: ArrayString): Unit = println(Inner.in) package exa

4、mple /内层包中的类 object Inner val in: String = in def main(args: ArrayString): Unit = println(Outer.out) /子包访问父包无需导包 package other 2.包对象在Scala中可以为每个包定义一个同名的包对象,定义在包对象中的成员,作为其对应包下所有class和object的共享变量,可以被直接访问。package object com val shareValue=share def shareMethod()=1)若使用Java的包管理风格,则包对象一般定义在其对应包下的package.s

5、cala文件中,包对象名与包名保持一致 包名:scala.collection = 包对象名:scala包下的collection2)如采用嵌套方式管理包,则包对象可与包定义在同一文件中,但是要保证包对象与包声明在同一作用域中package com object Outer val out: String = out def main(args: ArrayString): Unit = /调用包对象的name属性 println(name) package object com val name: String = com3.导包说明1)和Java一样,可以在顶部使用import导入,在这个

6、文件中的所有类都可以使用。2)局部导入:什么时候使用,什么时候导入在其作用范围内都可以使用3)通配符导入:import java.util._4)给类起名:import java.util.ArrayList=JL5)屏蔽类:import java.sql.Date=_,Array=_,_6)导入相同包的多个类:import java.util.HashSet, ArrayList7)导入包的绝对路径:new _root_.java.util.HashMap注意:Scala中的三个默认导入分别是 import java.lang._ import scala._ import scala.Pr

7、edef._二.类和对象在Java/Scala语言中,类是创建对象的模板,是客观事物在人脑中的主观反映;而只要是客观存在的事物都是对象(万物皆对象): 类:可以看成一个模板 对象:表示具体的事物1.定义类1)Java中的类 如果类是public的,则必须和文件名一致。 一般,一个.java文件有一个public类注意:Scala中没有public,一个.scala中可以写多个类。2)Scala基本语法修饰符 class 类名 类体 说明: 1)Scala语法中,类并不声明为public,所有这些类都具有公有可见性(即默认就是public) 2)一个Scala源文件可以包含多个类2.属性属性是类

8、的一个组成部分1)基本语法修饰符 var|val 属性名称 :类型 = 属性值注: 1)在Scala语言中,类、方法、属性默认修饰符是public,但是没有public关键字 2)对于Scala中的默认属性,底层会用private修饰,同时提供公开的设置以及获取属性的方法-面向封装 3)如果编译后要生成满足JavaBean规范的get和set方法的话,需要在属性上加BeanProperty注解 作用:实现对一些框架进行支持 4)如果想给属性赋默认值,需要在声明的时候,赋 _:数值数据类型是各种各样的0,而其他数据类型则为nullobject TestField def main(args: A

9、rrayString): Unit = /创建对象 val std: Student05 = new Student05() /通过对象.的方式访问属性 std.name = lisi println(std.name) /lisi println(std.sex) /null class Student05 /在Scala语言中,属性、方法、类默认的修饰是public /但是public 不能显式加 类似java中default /底层生成的字节码文件对属性用private进行修饰,提供了公开的获取|设置属性值的方法 /作用1:符合面向对象的封装特性 var name:String = zh

10、angsan /如果想生成符合JavaBean规范的get|set方法,需要在属性上加一个注解BeanProperty /作用2:对一些框架进行支持 BeanProperty var age:Int = 18 /如果想给属性赋默认值,需要在声明的时候,赋_ var sex:String = _Student类的反编译结果:三.封装封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。Java封装操作如下: 1)将属性进行私有化 2)提供一个公共的set方法,用于对属性赋值 3)提供一个公共的get方法,用于获取属性

11、的值Scala中默认public属性,底层实际为private,并通过get方法(obj.field())和set方法(obj.field_=(value))对其进行操作。所以Scala并不推荐将属性设为private,再为其设置public的get和set方法的做法。如果属性设置为private:其编译结果对应的属性及方法都为私有1.权限访问Java中: private 私有的,只能在当前类中被访问 default 默认的,当前类以及同包的其他类 protected 受保护的,可以在本类、同包的其它类以及非同包的子类中被访问 public 公开的,所有类Scala中: 在scala中,类、方

12、法、属性默认就是public修饰,但是没有public关键字 private 私有的:只能在当前类以及伴生对象中使用 protected 受保护的:比Java中的权限设置更加严格,同类、子类可以访问,同包其它类不能访问 private包名 包访问权限:可以让指定的包进行访问2.方法基本语法def 方法名(参数列表) :返回值类型 = 方法体3.创建对象1)基本语法val | var 对象名 :类型 = new 类型()2)说明: 1)val修饰对象,不能改变对象的引用(即:内存地址),可以改变对象属性的值。 2)var修饰对象,可以修改对象的引用和修改对象的属性值 3)自动推导变量类型不能多态

13、,所以多态需要显示声明class Person var name: String = canglaoshiobject Person def main(args: ArrayString): Unit = /val修饰对象,不能改变对象的引用(即:内存地址),可以改变对象属性的值。 val person = new Person() person.name = bobo / person = new Person()/ 错误的 println(person.name) 4.构造器1.构造器(构造方法)的作用: 构造对象 初始化属性(给对象的属性赋值)2.Java中构造器 1)方法名和类名保持一致 2)构造方法没有返回值类型 3)构造方法可以重载和Java一样,Scala构造对象也需要调用构

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号