zoukankan      html  css  js  c++  java
  • chapter06

    /**
    * Created by EX-CHENZECHAO001 on 2018-03-30.
    */
    class Chapter06 {

    }

    // 6 对象
    // 用对象作为单例或存放工具的方法
    // 类可以拥有一个同名的伴生对象
    // 对象可以扩展类或物质
    // 对象的apply方法通常用来构造伴生类的新实例
    // 如果不想显式定义main方法,可以用扩展App物质的对象
    // 可以通过扩展Enumeration对象来实现枚举

    // 6.1 单例对象
    // 可以用对象来实现:
    // 作为存放工具函数或常量的地方
    // 高效地共享单个不可变实例
    // 需要用单个实例来协调某个服务时
    object Accounts {
    private var lastNumber = 0

    def newUniqueNumber() = {
    lastNumber += 1
    lastNumber
    }
    }

    // 6.2 伴生对象
    // 类和它的伴生对象可以相互访问私有特性,它们必须存在于同一个源文件中。
    class Account62 (){
    // 类的伴生对象可以被访问,但并不在作用域当中,所以需要使用Account62.newUniqueNumber()来访问
    val id = Account62.newUniqueNumber()
    private var balance = 0.0
    def deposit(amount: Double): Unit = {
    balance += amount
    }
    }

    object Account62{ // Account62类的伴生对象
    private var lastNumber = 0
    private def newUniqueNumber() = {
    lastNumber += 1
    lastNumber
    }
    }

    // 6.3 扩展类或特质的对象
    // 一个object可以扩展类以及一个或多个特质,其结果是一个扩展了指定类以及特质的类的对象,同时拥有在对象定义中给出的所有特性
    abstract class UndoableAction(val description: String) {
    def undo(): Unit
    def redo(): Unit
    }

    object DoNothingAction extends UndoableAction("Do nothing") {
    override def undo(): Unit = {}
    override def redo(): Unit = {}
    }
    val actions = Map("open" -> DoNothingAction, "save" -> DoNothingAction)

    // 6.4 apply方法
    Array(100) // 调用Array.apply(100),输出一个单元素array[Int]
    new Array(100) // 调用的是构造器this(100),结果是Array[Nothing],包含100个Null元素

    class Account private(val id: Int, initialBalance: Double){
    private var balance = initialBalance
    }
    object Account {
    def apply(initialBalance: Double) = {
    }
    }

    // 6.5 应用程序对象
    // main方法
    object Hello {
    def main(args: Array[String]): Unit = {
    println("Hello world")
    }
    }

    // 扩展App特质
    object HelloNew extends App {
    println("Hello world")
    // 通过args属性得到参数
    if(args.length > 0){
    println("Hello " + args(0))
    }else{
    println("Hello world")
    }
    }
    // 调用应用程序时设置scala.time选项,程序退出时会显示用时。由扩展App特质里的DelaycdInit处理
    // /appcom/scala-2.11.8/bin/scala -Dscala.time -classpath . HelloNew cc

    // 6.6 枚举
    ///////////////////////// 了解下
    // Scala没有枚举类型。标准类库提供Enumeration助手类,可以产出枚举
    object TrafficLightColor extends Enumeration {
    val Red, Yellow, Green = Value
    }


    object Chapter06 {
    def main(args: Array[String]): Unit = {

    }
    }




  • 相关阅读:
    java 如何判断邮箱是否正确
    Android SDK Manager无法更新的解决
    洛谷P1162
    真 随笔
    初始化结构体
    Linux mkdir -p 后出现permission denied问题
    校赛F
    HDU1022
    UVa156
    HDU1060
  • 原文地址:https://www.cnblogs.com/chenzechao/p/8677206.html
Copyright © 2011-2022 走看看