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 时抛出异常。

Scala 基础(4)—— 类和对象的更多相关文章

  1. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  2. scala学习笔记——类和对象

    基础语法关于Scala程序,这是非常要注意以下几点. 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类名 - 对于所有的类名的第一个字 ...

  3. Scala中的类和对象

    类的定义 使用class定义 类的字段 在类中使用var,val定义字段 类的方法 scala中,使用var定义字段默认提供setter和getter方法对应名称为 value_= 和value /* ...

  4. Scala基础:面向对象之对象和继承

    对象 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method:在 Scala 中没有静态方法和静态字段,但是可以使用 object 这个语法结构来达到同样 ...

  5. Scala基础:类和构造器

    类 package com.zy.scala.cls /** * 在 Scala 中,类并不用声明为 public 类型的. * Scala 源文件中可以包含多个类,所有这些类都具有共有可见性. */ ...

  6. ObjectiveC1基础代码——类和对象

    // //  main.m //  ObjectiveC1 // //  Created by scjy on 15/10/30. //  Copyright © 2015年 lizhipeng. A ...

  7. C++_基础_类和对象

    内容: (1)引用 (2)类型转换 (3)C++社区给C程序员的建议 (4)面向对象编程的概念 (5)类和对象 (6)构造函数 (7)初始化列表及其必要性 1.引用1.1 指针和引用的使用说明(1)指 ...

  8. J2SE基础:1.类和对象基础

    什么是对象 在Java语言,全部的人,事物或者模块都是一个对象. 同样的对象具有一些同样的特性. 狗,猫,蛇3个对象(动物的对象) 苹果,梨,桔子3个对象(水果的对象) 什么是类 能够将现实生活中的对 ...

  9. java基础知识—类和对象

    1.对象的特征---类的属性 每个对象的每个属性都有特定的值 对象的操作---类的方法 2.封装 对象同时具有属性和方法两项属性. 对象的属性和方法同时被封装在一起,共同体现事物的特性,二者相辅相成, ...

  10. Java基础-3类和对象声明与创建

    一).在1和2中有粗略介绍过类和对象的概念,在这里简单回顾一下: 对象与类:一个实际或者虚拟的物体,这个物体既是我们的对象,这个物体呢又是属于一个分类,如动物类,人类 二).创建对象: 在创建对象的时 ...

随机推荐

  1. js最佳实践

    JavaScript使用windows对象的open()方法来创建新的浏览器窗口,这个方法有三个参数:windows.open(url,name,features) 参数一:url:是想在新窗口里打开 ...

  2. python的**和*

    1.**两个乘号就是乘方,比如2**4,结果就是2的4次方,结果是16一个乘号*,如果操作数是两个数字,就是这两个数字相乘,如2*4,结果为8*如果是字符串.列表.元组与一个整数N相乘,返回一个其所有 ...

  3. python中的zipfile

    zipfile - Work with ZIP archives ZipFile.namelist() Return a list of archive members by name. 返回压缩成员 ...

  4. Java自定义异常信息

    通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常 1.Spring  注入异常处理类 <bean id ="commonExce ...

  5. ARM S3C2440 时钟初始化流程

    1.设置lock time 2.设置分频系数 3.设置CPU到异步工作模式 4.设置 FCLK 了解 芯片的时钟原理图,以及寄存器的作用 了解芯片的晶振频率,锁相环,分频系数,以及有哪些时钟

  6. spring开篇

    本文引用http://www.cnblogs.com/ityouknow/p/5292559.html spring简介: spring是一个开源框架,spring是于2003 年兴起的一个轻量级的J ...

  7. (转)神舟飞船上的计算机使用什么操作系统,为什么是自研发不是 Linux?

    中国航天用的SpaceOS主要内容是仿造美国风河系统公司的VxWorks653(653是产品名,并非版本号).先解释为什么用这个系统不用Linux:航天器的内存和CPU都非常弱,弱到什么程度呢:天宫一 ...

  8. 使用shell脚本依据分区信息分批次的下载hive表格数据

    今天的业务场景大概是这样的,我想把hive表格下载到本地文件系统,然后把这个文件传送到另一个服务器上. 但是这个业务场景一个核心问题就是说我本地机器内存有限,hive表格大概是70G,我是不可能全部下 ...

  9. python flask学习第2天 URL中两种方式传参

    新创建项目   自己写个url映射到自定义的视图函数 在url中传递参数 app.py from flask import Flask app = Flask(__name__) @app.route ...

  10. SPOJ1026 概率DP

    Favorite Dice BuggyD loves to carry his favorite die around. Perhaps you wonder why it's his favorit ...