Scala学习笔记(三) ---- 类与对象
来源:互联网 发布:windows安装hadoop2.7 编辑:程序博客网 时间:2024/06/06 04:58
与Java一样,Scala类的定义也是通过关键字class来定义的。但首先要说的是,Scala在定义类时该类的文件名不一定非得和类名一样,这个是没有影响的,单在考虑要作为一个Java程序员的习惯,可以在编写类时,将文件名与类名保持一致,这样在查找类时也很方便。
好了,言归正传,首先贴出一个定义类的例子,如下:
class FirstCls { println("This is a first class.")}//创建、实例化类val myCls = new FirstCls
与Java一样,在类中定义变量或者方法时,可以定义方法或变量的作用域,Scala的默认级别为public。如果想定义成员变量只有在本类中使用,可以使用private来声明为私有的,这个不难理解。
在scala类的方法中,方法的返回值有两种形式:return显示表名返回结果;或不使用return关键字,scala可以将方法中最后一行语句的结果作为返回值类型,如下所示:
class MyCls { //显示return返回结果 def myMtd1() = {"This has return."} //不通过return显示返回的 def myMtd2() = {"This has not return."}}
单例对象(Singleton):
Scala可以说是比Java更面向对象的一门语言,在Scala中没有静态成员。作为Java静态成员的替代品---单例对象,可以起着与静态成员类似的作用。在Scala中定义单例对象需要注意的是,通过关键字object来定义,一般来说如果单例对象与类具有相同名称时,这个单例对象就是作为这个类的伴生对象,而这个类则是这个单例对象的伴生类。
现在我们来看一个例子:
//伴生类class MyCls {
private val name = "Micheal" def myMtd() = println("This is a something.")}//伴生对象object MyCls {
def mtd(): String = {
val cls = new MyCls
println("name: " + cls.name)
cls.name
}}
上面的例子说明了伴生类与伴生对象的定义。同时在伴生对象中,我们调用伴生类的私有成员,如伴生类的私有成员(name)。
在Scala中,你不能通过new关键字来实例化一个单例对象,而且单例对象也是不带参数的。上面我们有说过,单例对象与伴生类名称相同的话,它就是这个类的伴生对象,但也有情况单例对象不与类的名称相同的话,那么这样的单例对象就称之为孤立对象。在Java中我们都通过一个main方法来执行一段程序,Scala也同样可以包含main方法的孤立单例来执行Scala程序。如下面代码所示:
import MyCls.mtd
object MyObj { def main(args : Array[String]) { println("name : " + mtd()) }}
上面的例子中,我们引用了MyCls,我们需要将MyCls.scala 与 MyObj.scala都编译然后才能执行main方法,如:
> scalac MyCls.scala MyObj.scala//执行完了之后,会在目录下产生几个编译后的文件,下面就可以执行main方法了。> scala MyObj
上面使用scalac来编译scala源文件,其实Scala还可以通过fsc来快速编译scala源文件,这里就不贴代码了。
Application/App:
首先要说明的,scala 2.9版本后弃用了Application,而启用了App
Scala的单例对象通过extends Application ,然后就可以不用定义main方法来将代码写到单例对象的大括号主体内,这样的写法其实是使用了Application中带有合适的main方法,单例对象继承后,到括号内的代码内容就相当于定义在main方法中一样,所以可以编译并运行。如下面代码:
object myApp extends App { val cls = new MyCls println("name->" + cls.name)}
- Scala学习笔记(三) ---- 类与对象
- scala学习笔记(三)
- scala学习笔记(三)
- scala 学习笔记(三)
- scala学习笔记(三)
- Scala学习笔记(3): 面向对象与容器
- scala学习-类与对象
- [Scala]Scala学习笔记三 Map与Tuple
- Scala学习笔记三
- scala学习笔记三
- scala 学习笔记--对象
- scala学习笔记-对象
- Java学习笔记,类与对象(三)
- PHP学习笔记(三)类与面向对象
- OC学习笔记(三)--类与对象
- Java基础学习笔记:(三)类与对象
- Scala学习笔记(三)类层级和特质
- scala学习三:scala面向对象
- 关于网络连接Network的使用
- Git - Your branch and 'origin/xxx' have diverged
- Storm中的一些概念
- poj1330 裸LCA
- 使用 JQuery 返回页面顶部
- Scala学习笔记(三) ---- 类与对象
- 用JAVA读取XML文件
- 一天一篇批处理之——part1:Batch批处理语句中echo on/off 与@ 的区别
- afxAfxBeginThread 获取线程函数返回值
- 获取当前屏幕显示的viewcontroller
- java 数据持久层的框架(完全转载)
- css3做圆形轨迹移动动画
- Android SDK和API Level的对应关系
- 精品小说