概述
为了支持面向对象编程(OOP),
Scala
提供了一个类构造。语法比Java
和C#
等语言简洁得多,并且仍然易于使用和阅读。
将基于以下几点说明:
- 基本类构造函数
- 使用
val
让字段只读 - 类构造函数
- 其他
Scala
类示例
相关链接
阅读之前,可以浏览一下
基本类构造函数
有一个
Scala
类,它的构造函数定义了两个参数,firstName
和lastName
class Person(var firstName: String, var lastName: String)
在类构造函数中定义参数会自动在类中创建字段,在本例中,可以访问firstName
和lastName
字段,如下所示:
scala> class Person(var firstName: String, var lastName: String)
defined class Person
scala> val p = new Person("Bill", "Panner")
p: Person = Person@2f651f93
scala> println(p.firstName + " " + p.lastName)
Bill Panner
在这个示例中,因为所有的字段都是使用var
定义的,它们都是可变的,意味着它们可以被赋值
scala> p.firstName = "William"
p.firstName: String = William
scala> p.lastName = "Bernheim"
p.lastName: String = Bernheim
scala与java对比
如果以前使用过
java
,对比一下
scala
class Person(var firstName: String, var lastName: String)
java
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
使用val
让字段只读
使用
val
定义字段,让字段只读
class Person(val firstName: String, val lastName: String)
--- ---
**提示:**如果使用
Scala
编写OOP
代码,将字段创建为var
字段,这样就可以对它们进行重新赋值。当使用Scala
编写FP
代码时,通常会使用case
类这种,后面会详细说明
类构造函数
在Scala
中,类的主构造函数是以下各项的组合:
- 构造函数参数
- 在类的主体中调用的方法
- 在类的主体中执行的语句和表达式
Scala
类主体中声明的字段以类似Java
的方式进行处理;它们是在类第一次实例化时分配。
这个Person
类演示了在类的主体中可以做的几件事:
class Person(var firstName: String, var lastName: String) {
println("the constructor begins")
// 'public' access by default
var age = 0
//
private val HOME = System.getProperty("user.home")
// some methods
override def toString(): String = s"$firstName $lastName is $age years old"
def printHome(): Unit = println(s"HOME = $HOME")
def printFullName(): Unit = println(this)
printHome()
printFullName()
println("you've reached the end of the constructor")
}
scala
命令行执行
scala> val p = new Person("Kim", "Carnes")
the constructor begins
HOME = /Users/hyl
Kim Carnes is 0 years old
you've reached the end of the constructor
p: Person = Kim Carnes is 0 years old
scala> p.age
res1: Int = 0
scala> p.age = 36
p.age: Int = 36
scala> p
res2: Person = Kim Carnes is 36 years old
scala> p.printHome
HOME = /Users/hyl
scala> p.printFullName
Kim Carnes is 36 years old
scala
的这种方式是方便的,从java
过来的,会觉得有点不那么好理解
其他Scala
类示例
class Pizza (var crustSize: Int, var crustType: String)
// a stock, like AAPL or GOOG
class Stock(var symbol: String, var price: BigDecimal)
// a network socket
class Socket(val timeout: Int, val linger: Int) {
override def toString = s"timeout: $timeout, linger: $linger"
}
class Address (
var street1: String,
var street2: String,
var city: String,
var state: String
)
结束
scala
类的介绍到此结束