zoukankan      html  css  js  c++  java
  • Scala 基础(4)—— 类和对象

    1. 类、字段和方法

    Scala 用 class 关键字定义类,一旦定义好一个类,就可以使用 new 关键字创建对象。

    Scala 使用 new 调用无参构造器时,可以不使用 (),推荐不使用括号:

    class MyClass {
      // MyClass 的定义
    }
    
    val a = new MyClass
    

    在类的定义中,可以填入字段(field)和方法(method),两者统称为成员(member)。

    字段保留了对象的状态,即数据。

    方法使用数据执行计算。

    使用 var 或者 val 定义字段,使用 def 定义方法。

    为了控制外部对于对象的字段和方法的访问,可以给这些加上访问控制符(private 和 protected),访问控制符的用法在后面的章节细讲。

    Scala 的方法和 Java 的方法,有一个显著的区别,就是方法的入参默认都是 val 类型的。

    所以这样的调用是非法的:

    def add(b: Byte): Unit = {
      b = 1 // 不能编译
    }
    

    Java 强制 java 文件和公有类采用统一名字,Scala 没有强制这一点,但是仍然推荐和 Java 的相同风格。

    2. 单例对象

    Scala 没有 static 关键字,在 class 里面定义的字段方法都是对象持有的,也就是实例成员。

    Scala 有另外办法去实现静态成员,就是 object 关键字,我们称这种用 object 关键字定义的为单例对象(singleton object)。

    object MyClass {
      // 这里定义静态字段 和 静态方法
    }
    

    当单例对象和某一个类共享同一个名字,称这个单例对象是这个类的伴生对象(companion object)。同时类又叫这个单例对象的伴生类(companion class)。

    必须在同一个文件中定义类和类的伴生对象。

    类和它的伴生对象可以互相访问私有成员。

    没有同名伴生类的单例对象被称为孤立对象(standalone object),常用于工具方法。

    类和单例对象有一个区别,就是单例对象不接受参数。

    单例对象只有在首次被代码访问的时候才初始化。

    3. 对象相等性

    我们都知道,Java 在判断两个对象是否相等时有2个语义:

    引用相等:== 操作符

    值相等:Object 类的 equals() 方法

    而 Scala 在这一方面和 Java 不同

    值相等:== 操作符

    引用相等:Any 类(所有 Scala 类的超类)的 eq 方法,ne 方法(与 eq 方法结果相反)

      def main(args: Array[String]): Unit = {
        val s = "Hello World!"
        val s1 = "Hello"
        val s2 = " World!"
        println(s == s1 + s2) // true
        println(s eq s1 + s2) // false
        println(s ne s1 + s2) // true
      }

    Scala 有一个优势在于,无论是使用 == 操作符,还是 eq 或是 ne 方法,不需要担心左侧为 null 时抛出异常。

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/10247503.html
Copyright © 2011-2022 走看看