Scala 类和对象

Scala class:  

  Scala 源文件中可以有很多类(class),这些类默认都是Public的,public是Scala的默认访问级别。在Scala中,声明一个未用priavate修饰的字段 var age,scala编译器会字自动帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似。例如:

 stu.age = 10 (此处的age是def age = (x$1: Int):Unit)

 println(stu.age) (此处的age是def age: Int)

  若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。

  定义方法时,如果仅仅为了计算单个很短的表达式,可以不写大括号;当返回值类型可推断时也可以不写返回值;甚至也可以同时不写等号&返回类型(这种情况下一定要有大括号),同时不写等号&类型的方法的返回值是 Unit。因此,对于不想返回Unit的方法一定要加“=”, 不然会出错,得不到想要的的结果。

  还有一种常用的定义方式是:

 private [this] var gender = "male"          //代表该属性只属于当前实例,即使是类内部的方法也不能访问该属性

类构造器:

  每个类都有一个默认构造器this(),重载(附属、辅助)构造器都需要直接或间接(即调用其它辅助构造器)调用主构造器this(),换句话说,Scala类中的每个辅助构造器都是以”this(...)“形式开头的。因此可以说主构造器是类的唯一入口点。

  Scala编译器将把类内部的任何既不是字段又不是方法的代码编译至主构造器中。实例化对象时传入的参数仅用来构造对象,不能在对象外部直接访问,如果要访问需要重新定义字段并将参数复制给对应字段。

  可以利用先决条件(precondition)保证主构造器在合理的情况下调用。例如:class Rational(n: Int, d: Int){ require(d != 0) },如果传入的值为false,require将抛出IllegalArgumentException异常阻止对象被构造。

  如果希望实例化类的时候禁止调用主构造器this,就在定义类的时候使用Private关键字,例 : class Teacher private{}

原文地址:https://www.cnblogs.com/jiang-Xin/p/5658763.html