5.scala中的对象

排版乱?请移步原文获得更好的阅读体验

1.单例对象

scala中没有静态类或者静态方法,都是通过object实现的,它表示某个类的单例对象。如object People是class People的单例对象。

2.伴生对象

java中有些类可能会既有静态方法又有实例方法,在scala中静态方法存在于对象中,也就意味中scala中需要有这么一个东西,它既是类,也含有对象。其中的对象就是类的伴生对象,同样的,类就是对象的伴生类。需要注意的是类和它的伴生对象可以相互访问私有属性,它们也必须存在于同一个源文件中。如:

scala    14行

class People{
 private val name:String = ""
   def run()={
   ……
   }
}

object Peole{
 private var age:Int
   def age(){
   this.age += 1
   }
}

3.apply方法

调用apply方法其实是调用的类对应的伴生对象的apply方法,apply方法类似于使用构造器,但是在嵌套结构中使用apply方法能省去使用new。Array("marry","alice")其实是调用了Array类对应的伴生对象的apply方法。看一个实例:

scala    12行

class Peopel(salary:Int){
	……
}

object People{
 def apply(salary:Int):People= {
   	new People(salary)
   }
}

val p = People(100) //此处调用了伴生对象的apply方法

4.枚举

scala中没有枚举类型,实现方式是通过Enumeration产出枚举。比如:

scala    9行

object ColorEnum extends Enumeration {
 val Red,Green,Yellow = Value //调用了Value方法生成三个枚举值
   /*相当于
   val Red = Value
   val Green = Value
   val Yellow = Value
   */
}

更多文章请关注微信公众号:bigdataer

时间: 2024-08-01 10:44:13

5.scala中的对象的相关文章

Scala学习回顾(五)---- scala中的apply

注:本文学习源自:DT大数据梦工厂(微信公众号:DT_Spark) 在Scala中,我们通常都会使用类似函数调用的语法.举例来说,如果s是一个字符串,那么s(i)就是该字符串的第i个字符.(而在java中,你会这样写:s.charAt(i).)在IDEA中运行如下代码: println("Hello(4)")//将打印出'o' 你可以把这种用法当做是()操作符的重载形式,它背后的实现原理是一个名为apply的方法.举例来说,在StringOps类的文档中,你会发现这样一个方法: def

Scala详解---------对象

Scala中的对象 摘要: 在本篇中,你将会学到何时使用Scala的object语法结构.在你需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,你就会用到它.本篇的要点包括: 1. 用对象作为单例或存放工具方法 2. 类可以拥有-个同名的伴生对象 3. 对象可以扩展类或特质 4. 对象的apply方法通常用来构造伴生类的新实例 5. 如果不想显式定义main方法,可以用扩展App特质的对象 6. 你可以通过扩展Enumeration对象来实现枚举 单例对象 Scala没有静态方

聊聊 Scala 的伴生对象及其意义

2019-04-22 关键字:Scala 伴生对象的作用 关于 Scala 伴生对象,比教材更详细的解释. 什么是伴生对象? 教材中关于伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态成员的类的功能. 为什么上面说它是一种 "功能" 呢?因为要想实现像 Java 中那样的类,光靠一个 Scala 类可不行.在 Scala 中,我们必须: 1. 定义一个 class 并在这里面实现所有的实例成员. 2. 添加一个 object ,这个 object 要与上面的 class

scala中List的泛型分析以及::类和Nil对象

学习了scala中List的泛型分析以及::类和Nil对象,List是对scala的类型系统的一个非常好的使用,进一步巩固List的知识对于理解scala的类型系统是非常有价值的.本讲主要分析了List的泛型.::类和Nil对象. List有两个非常重要的子类,一个是::,一个是Nil,这两个子类都是case class.Nil表示一个空的列表,而::表达的是一个非空的列表. 例子如下: case object Nil extends List[Nothing]{ override def is

scala中option、None、some对象

转载:http://www.jianshu.com/p/95896d06a94d 1.option类型避免对象是空值,造成空指针异常. 2.None对象表示null,在没有对象返回时使用,some在有对象值时使用. 避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是"无",在Java,它是null.在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的.但是这对语言设计者来说是一件令人疑惑的选择.为什么要在程序员希望返回一个对象

scala中的伴生对象实现原理

孤立对象是只有一个object关键字修饰的对象. 该对象会编译成两个class文件, 一个是以孤立对象的名字命名的class,  一个是以孤立对象的名字后面加上一个$字符命名的class, 这个class又叫做虚构类. 源码中的孤立对象中的字段和方法, 都被编译成以孤立对象的名字命名的class中的静态方法, 这些静态方法都会访问单例的虚构类对象. 虚构了是传统意义上的单例模式, 并且在类初始化的时候有, 就会创建唯一的对象. 源码中的所有字段和方法都会在虚构类中有相对应的成员. 如果不明白的可

scala中的孤立对象实现原理

<Scala编程>这本书中, 把孤立对象和伴生对象都叫做单例对象.孤立对象指的是只有一个使用object关键字定义的对象, 伴生对象是指有一个使用object关键字定义的对象, 除此之外还有一个使用class关键字定义的同名类, 这个同名的类叫做伴生类.在Scala中单例对象这个概念多少都会让人迷惑, 按<Scala编程>这本书中的说法, 使用object关键字修饰的对象就叫做单例对象.其实这里的单例和设计模式中的单例模式的概念并不尽相同.在Scala中没有静态的概念, 所有的东西

scala中trait学习笔记

scala中提供的trait(特质)和Java中的Interface有很多相似之处.都可以持有方法的声明和属性,但是trait还有比interface强大的多的其他用法. 1. trait可以带有方法实现: 2. trait与interface一样,可以互相继承.但是trait可以继承自某个类,但是这种特质只能够混入父类的子类中,不能随意混入: 3. trait中可以在运行时动态调用方法. 下面举一个trait使用的例子. 首先定义一个虚类IntQueue和特质Logger abstract c

scala学习手记16 &ndash; scala中的static

前面两节学了scala的对象和伴生对象,这两个在使用的时候很有些java的静态成员的意思. scala中没有静态字段和静态方法.静态成员会破坏scala所支持的完整的面向对象模型.不过可以通过伴生对象实现对scala的类一级的操作. 回过头来再看一遍那个Marker的例子,略做了一些调整: class Marker private(val color: String) { println("Creating " + this) override def toString(): Stri