zoukankan      html  css  js  c++  java
  • Scala的静态方法和实例方法

    Scala的对象学习

    Scala没有静态方法或静态字段,可以使用object这个语法达到相同的目的,对象定义了某个类的单个实例

     object Accounts {
    
      private var lastNumber = 0
    
      /**
        * 定义一个getNumber的方法
        *
        * @return
        */
      def getNumber(): Int = {
        lastNumber += 1
        lastNumber
      }
    
      def main(args: Array[String]): Unit = {
        // 相当于java静态方法调用
       println(Accounts.getNumber())
      }
    

    在java中,通常会出现一个类即有实例方法又有静态方法的类,在Scala中可以使用类和同名的伴生对象达到相同的目的

    class Account {
    // 实例方法
        ......
    }
    object Account {
    // 静态方法
        ......
    }
    

    类和它的伴生对象可以相互访问私有特性,但前提是它们都在同一个源文件中

    • 抽象类
    abstract class UndoableAction(val description: String) {
        def undo(): Unit
        def redo(): Unit
    }
    
    object DoNothing extends UndoableAction("Do nothing") {
        override def undo() {}
    }
    // 打开和保存功能尚未实现
    val actions = Map("open" -> DoNothing,"save" -> DoNothing)
    
    • apply方法
    通常一个apply方法返回的是伴生类对象
    Array("Mary","had","little")
    Array(100) 和new Array(100) 两者是不同的概念,前一个表达式调用的是apply(100),输出一个单元素整数100的Array[Int],而第二个表达式调用的是this(100),包含了100个null元素
    以下是apply方法的示例
    class Account private (val id:Int,initialBalance:Double){
        ......
    }
     
     // 伴生对象
    object Account {
        def apply(initialBalance:Double) = {
            new Account(1,initialBalance)
        }
    }
    
  • 相关阅读:
    爬虫心得
    WSL windows子系统ubuntu18.04建设自己的乌云
    WSL windwos 子系统 ubuntu18.04安装mysql
    python 163 email 554
    Centos 安装Oracle
    JS带进度 文件 重复 自动 异步上传
    xadmin 小组件默认折叠
    grep
    sed
    awk
  • 原文地址:https://www.cnblogs.com/codegeekgao/p/9619786.html
Copyright © 2011-2022 走看看