zoukankan      html  css  js  c++  java
  • 8.Scala-对象

    第8章 对象

    8.1 单例对象

    Scala 中没有静态方法和静态字段, 你可以用 object 这个语法结构来达到同样的目的。
    class Man private(val sex: String, name: String){
      
      def describe = {
        println("Sex:" + sex + "name:" + name)
      }
    
    }
    
    object  Man{
      var instance: Man = null
      def apply(name: String)={
        if(instance == null){
          
          instance = new Man("男", name)
          
        }
        instance
      }
    }

    对象构造器在该对象第一次使用时调用。如果对象没有使用过,他的构造器不会被执行。

    对象基本具有类的所有特性,就是一点,你不能设置构造器的参数。 

    测试:

    val man1 = Man("Nick")
    val man2 = Man("Thomas")
    man1.describe
    man2.describe

    8.2 伴生对象

    Java 中会有类既有实例方法又有静态方法的类。Scala 中可以通过伴生对象进行实现。
    如下:
    class Account {
      val id = Account.newUniqueNumber()
      private var balance = 0.0
      def deposit(amount: Double) { balance += amount }
      def description = "Account " + id + " with balance " + balance
    }
    object Account { // The companion object
      private var lastNumber = 0
      private def newUniqueNumber() = { lastNumber += 1; lastNumber }
    }

    测试:

    val acct1 = new Account
    val acct2 = new Account
    acct1.deposit(1000)
    val d1 = acct1.description
    val d2 = acct2.description

     尖叫提示:

    类和它的伴生对象可以相互访问私有特性,他们必须存在同一个源文件
    中。必须同名

    8.3 Apply 方法

    1)apply 方法一般都声明在伴生类对象中,可以用来实例化伴生类对象:

    class Man private(val sex: String, name: String){
    
      def describe = {
        println("Sex:" + sex + "name:" + name)
      }
    
    }
    
    object  Man{
      
      def apply(name: String)={
          new Man("男", name)
      }
      
    }

    测试:

    val man1 = Man("Nick")
    val man2 = Man("Thomas")
    man1.describe
    man2.describe

    2)也可以用来实现单例模式,我们只需要对上述例子稍加改动:

    看上面 8.1 单例模式

    8.4 应用程序对象

    每一个 Scala 应用程序都需要从一个对象的 main 方法开始执行,这个方
    法的类型为 Array[String]=>Unit。
    object Hello {
        def main(args: Array[String]) {
            println("Hello, World!")
        }
    }

     或者扩展一个App特征:

    object ObjectSyllabus extends App{
    
      if(args.length > 0)
        println("hello," + args(0))
      else
        println("hello,world!")
    
    }

    8.5 枚举

    Scala 中没有枚举类型,定义一个扩展 Enumeration 类的对象,并以 value
    调用初始化枚举中的所有可能值。
    object TrafficLightColor extends Enumeration {
        val Red = Value(0, "Stop")
        val Yellow = Value(10) // Name "Yellow"
        val Green = Value("Go") // ID 11
    }

     测试:

    println(TrafficLightColor.Red)
    println(TrafficLightColor.Red.id)
    println(TrafficLightColor.Red.toString)
  • 相关阅读:
    JTA
    JPA
    深度优先搜索与广度优先搜索
    http和https区别
    数据库系统阶段特点
    Java中定义和声明
    java之集合ArrayList实例
    java实例之商品库
    java之封装
    java之类和对象
  • 原文地址:https://www.cnblogs.com/LXL616/p/11124072.html
Copyright © 2011-2022 走看看