3.1、类和方法
来源:互联网 发布:阿里云连接管理终端 编辑:程序博客网 时间:2024/05/23 15:00
类的定义方式
class Persion{//这里是定义类的字段和方法}
然后,就可以使用new关键字来生成对象:
val persion = new Persion//或者val persion = new Persion()
字段的可见性
1、如果为var字段,scala会为其自动生成访问getter和修改setter方法。
2、如果字段为val,只会生成getter方法。
3、如果字段没有var或者val,不会自动生成getter和setter。
4、如果被private修饰,就可以防止生成getter和setter了。
举一个例子:
class Persion{ var name = "Damien"}
这个时候,你便可以使用这个方式为其赋值或者获取其值
val persion = new Persion()println(persion.name) //获取初始值persion.name = "Abbyabbie" //修改值println(persion.name) //打印新值
输出结果如下:
DamienAbbyabbie
getter和setter方法
当遇到private的值时,scala中,getter和setter方法和java中并不一样。在Scala中,可以通过定义类似getter和setter的方法,分别叫做value和value_=,注意,这里的“value_=”等号前后一定不能有空格,否则会有报错,value可以谁当为任意的名字
class Persion{ private var name = "Damien" def value = name //setter def value_=(newValue: String){ name = newValue //getter }}Object Test{ def main(){ val persion = new Persion println(persion.value) //打印value的初始值、getter persion.value = 3 //为value设置新的值、setter println(persion.value) //打印value的新值 }}
通过上面这种方式就可以方位private变量了。
设置未初始化的var字段类型
很多时候我们需要未初始化,好比如这样” var x = “。在什么场景会用到?你想想注册时候,是不是很多都是先填写一个用户名和密码,后续才让你补充详细信息?年龄姓名都好说,比如
var age = 0var firstName = ""var lastName = ""
但是地址怎么办呢,也是这样成这样?很显然是不合理的。这里提供了一种Option操作,如下:
object Test { def main(args: Array[String]): Unit = { val p = Persion("aaa","bbb") p.address = Some(Address("bj", "CN", "2008")) p.address.foreach{ a => println(a.city) println(a.state) println(a.zip) } } case class Persion(var username: String, var password: String){ var age = 0 var firstName = "" var lastName = "" var address = None: Option[Address] } case class Address(city: String, country: String, zip: String)}
字段没有值,address就是一个None,访问其值可以用foreach,并且如果为空,循环会被跳过。如果address有值,它会是一个Some[Address],foreach会循环打印出来,或者做你设定的操作。
Case
在上面出现过case这么个东西,他就是用来生成模板代码的一个类。它会生成一个apply方法,就可以不用new关键字创建新的实例了。
其参数默然为val,会自动生成访问方法。如果你写了var的参数,会提供修改方法。
默认提供一个toString方法
scala> case class Persion(name: String, relation: String)defined class Persionscala> val emily = Persion("Emily", "niece)emily: Persion = Persion(Emily,niece)//↓ toString ↓scala> emilyres0: Persion = Persion(Emily,niece)
方法定义
def fun(int x): String = { //code}//可以简化为def fun(i: Int) = i + 1
在scala中,返回值类型不是必须的,在方法体很短的时候,花括号也不是必须的。
scala中的方法一样可以继承父类的方法:
class Father{ def sayHello { println("HelloMaster")}}class Kids extends Father{ def sayNihao { super.sayHello }}
- 3.1、类和方法
- 实例方法和类方法
- 实例方法和类方法
- 实例方法和类方法
- 实例方法和类方法
- 类方法和实例方法
- 实例方法和类方法
- 实例方法和类方法
- 实例方法和类方法
- 类方法和实例方法
- 类方法和对象方法
- 对象方法和类方法
- 类方法和静态方法
- 实例方法和类方法
- 类方法和实例方法
- 类方法和实例方法
- 类方法和静态方法
- 类方法和实例方法
- 让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇
- /etc/exports参数解释
- javascript通过url向jsp页面传递中文参数乱码解决方法
- 部署 Graylog 日志系统
- fastDFS分布式文件系统与文件上传下载
- 3.1、类和方法
- 在Genymotion中安装apk报错:Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
- 关于引用网络echarts.js报错的问题解决方法
- Python流程控制
- Exponential family form of Multivariate Gaussian Distribution
- linux下常用的系统工作命令
- 百度爬虫robots.txt文件规范
- time_t localtion
- 趣图:程序员头疼的 4 种类型,你 99% 中枪了