scala trait objectclass和object,trait的区别

Scala的class和object,Scala的变量、类的介绍_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Scala的class和object,Scala的变量、类的介绍
|0|0|文档简介
炼数成金用新兴的社交网站的形式,把各应用...|
总评分0.0|
&&炼数成金《Scala从基础到开发实战》
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢scala入门教程:scala中的面向对象定义类,构造函数,继承 - 为程序员服务
为程序员服务
scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言。
定义scala的简单类
class Point (val x:Int, val y:Int)
上面一行代码就是一个scala类的定义:
首先是关键字class
其后是类名 Point
类名之后的括号中是构造函数的参数列表,这里相当于定义了对象的两个常量,其名称分别为x,y,类型都是Int
上面的类和下面的类是一致的,不过更精简了。
class Point (xArg:Int, yArg:Int) {
val x = xArg
val y = yArg
我们写一个main方法,看下如何使用这个Point类。
object App {
def main(args : Array[String]) {
val p = new Point(10,20)
println("point info(" + p.x + "," + p.y + ")")
在main方法中通过val p = new Point(10,10)来初始化一个Point类的实例,然后就可以访问p.x和p.y字段了。
scala对象的构造函数
只是初始化字段的构造函数
如下Point类示例,在构造函数中初始化了isOrigin,表示此点是否为原点
class Point (val x:Int, val y:Int) {
val isOriginal:Boolean = {
x == 0 && y == 0
上述代码中的isOriginal后面花括号内的内容是构造函数。
通过this定义的scala构造函数
class Point (val x:Int, val y:Int) {
val isOriginal:Boolean = {
x == 0 && y == 0
def this(xArg:Int) {
println("hello, I'm this constructor")
this(xArg,0)
如上述代码定义了一个只有一个参数的构造函数,这个构造函数调用了默认的构造函数,传了xArg,和0值。这样写的构造函数可以做初始化字段之外的事情。构造函数之间是可以通过this(...)相互调用的。
scala的继承
下面我们实现一个Point的继承类TalkPoint这个Point具有可以把自己的坐标打印出来。
class TalkPoint(x:Int, y:Int) extends Point (x,y) {
def talk() = {
println("my position is ("+x+","+y+")")
上面的TalkPoint类继承于Point,注意它的默认构造函数,x,y之前没有val的修饰,extends Point(x,y) 之后会自动调用基类的构造函数。我们可以通过下面代码,调用这个子类的talk方法
object App {
def main(args : Array[String]) {
val p = new TalkPoint(0,0)
运行程序将输出:my position is (0,0)
重写基类的方法
下面我们再创建一个TalkPoint的子类,这个类叫HappyTalkPoint,该子类会重写TalkPoint的talk方法。如下代码:
class HappyTalkPoint(x:Int, y:Int) extends TalkPoint(x,y) {
override def
talk() = {
println("I'm happy")
super.talk()
在talk方法的def关键字前面有一个override关键字,来表示重写,这个关键字时必须的,否则编译器会报错;这一点和java中有所不同。在这个方法的实现里面我们先打印出了I'm happy,然后通过super.talk()调用了父类的方法。
我们修改下App类的main方法:
object App {
def main(args : Array[String]) {
val p = new HappyTalkPoint(0,0)
运行程序将会输出:
my position is (0,0)
推荐阅读:
相关聚客文章问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
trait Stream[+A] {
def toList: List[A] = this match{
case Empty =& Nil
case Cons(h,t) =& h() :: t().toList
def headOption:Option[A] = this match{
case Empty =& None
case Cons(h,t) =& Some(h())
case object Empty extends Stream[Nothing]
case class Cons[+A](h: ()=&A, t : ()=&Stream[A]) extends Stream[A]
object Stream{
def cons[A](h: =&A, t : =&Stream[A]): Stream[A]= {
lazy val head = h
lazy val tail = t
Cons(()=&head,()=&tail)
def empty[A]:Stream[A] = Empty
def apply[A](as: A*):Stream[A]=if (as.isEmpty) empty else cons(as.head, apply(as.tail: _*))
如图,照抄了一个Steam的实现,但是我的疑惑是toList方法,他不应该放在伴生对象里吗?一开始toList我用的虚函数,但我看headOption能用模式匹配,我就试了试,也可以,所以toList怎么实现多态的?我自己有点晕。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
伴生对象有些类似于java里面静态工厂类
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 Appclass Counter {
private var value = 0 // 必须初始化字段
def increment() { value += 1 } // 方法默认公有
def current = value // 调用必须是myCounter.current这种风格
class Student{
var age=20
//底层编译器会自动为私有的age添加get和set的公有方法,可以理解为伪public类型
private[this] var gender="male" //private[this] 只有该类的this可以使用
private var name="clow" //声明了private,底层编译器会自动为私有的name添加get和set的私有方法
//但是可以自己定义属性方法
def getName=this.name
def setName(value:String){this.name=value}
Scala类和java类中有些区别,在Scala声明private变量会Scala编译器会自动生成get,set,在Scala中变量是需要初始化的,如果不声明private默认是public的
Scala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的&半生对象&,可以理解把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化的操作。
在java中可以通过interface实现多重继承,在Scala中可以通过特征(trait)实现多重继承,不过与java不同的是,它可以定义自己的属性和实现方法体,在没有自己的实现方法体时可以认为它时java interface是等价的,在Scala中也是一般只能继承一个父类,可以通过多个with进行多重继承。
阅读(...) 评论()

我要回帖

更多关于 scala class object 的文章

 

随机推荐