Scala入门-类与对象


创建类

object BasicClass {
  def main(args: Array[String]): Unit = {
    val cat = new Cat
    cat.name = "Catty"
    cat.age = 10
    cat.color = "White"
  }

}

class Cat {
  var name: String = ""
  var age: Int = _
  var color: String = _
}

var name: String = "" 为例,分析一下深层次的原理。

当我们声明 name 该属性时,编译器会自动转化为 private name

同时,也会自动生成两个 public 方法,这两个方法等价于 Java 中的 getter 和 setter 方法。

下面看一下对应的字节码 class 文件,便一目了然。

public class Cat
{
  private String name = "";
  private int age;
  private String color;

  // getter
  public String name() { return this.name; }
  // setter
  public void name_$eq(String x$1) { this.name = x$1; }

  public int age() { return this.age; }
  public void age_$eq(int x$1) { this.age = x$1; }

  public String color() { return this.color; }
  public void color_$eq(String x$1) { this.color = x$1; }

}

属性

  • 类中声明属性必须同时进行初始化操作。
  • 声明时属性的类型可以省略,使用类型自动推导。
  • 在定义属性时,可以暂时不赋值,使用符号 _ (下划线),让系统分配默认值
// 使用类型推导
var name = 10
// 分配默认值
var age = _

常用类型的默认值如下:

类型 默认值
Byte、Short、Int、Long 0
Float、Double 0.0
String、引用类型 null
Boolean false

对象

声明对象时,一般情况下可以省略对象类型。但在涉及多态的情况下,声明对象时必须指定对象的类型。

val | var 对象名 [:类型] = new 类型()

普通情况下:

val cat = new Cat()
val cat = new Cat // 等价。如果主构造器没有形参,可以省略小括号。

涉及多态情况下,假设声明了两个类 Cat 和 Animal,Cat 是 Animal 的子类:

val animal: Animal = new Cat // 父类引用指向子类对象

文章作者: Tianny
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tianny !
评论
 上一篇
Scala入门-构造器 Scala入门-构造器
Scala 构造器包括两种:主构造器和辅助构造器。 主构造器object Construct01 { def main(args: Array[String]): Unit = { val p1 = new Person("To
2020-03-19
下一篇 
Scala入门-异常 Scala入门-异常
try-catch-finallyobject ScalaException { def main(args: Array[String]): Unit = { try { val r = 10 / 0 }
2020-03-18
  目录