在java中我们可以通过定义一个类及其属性来实现一些功能,对于一些静态属性,可以直接通过类来调用,而在scala中没有了静态这个概念,如何实现这样的功能。
先以java为例:
package scala_part1;
public class TestEmployee {
private String name;
private Integer age;
//静态属性,直接通过类名调用
private static String company = "Tencent";
//有参构造方法,不包含静态属性,因为静态属性是属于类的,不属于某个对象
public TestEmployee(String name, Integer age) {
this.name = name;
this.age = age;
}
//定义我们要实现的功能
public void printString(){
System.out.println(this.name + "-" + this.age + "-" + TestEmployee.company);
}
public static void main(String[] args) {
//创建实例对象
TestEmployee employee = new TestEmployee("Lily", 29);
employee.printString();
}
}
以scala为例:
注意,我们要创建的是Class,而不是object:
package scala_part1
//在括号中定义属性
class TestEmployee(name: String, age: Int) {
//定义我们要实现的功能
def printString(): Unit = {
/*
注意这里的name和age都是直接引用传进来的参数,所以不需要用this。
对于静态属性company,由于scala遵从对象原则,所以不能使用类名直接调用,
所以我们需要在伴生对象里定义company属性,这里的TestEmployee表示的是下面的伴生对象。
因为半生对象是全局唯一的仅此一个的单例对象,所以就可以达到和java中静态属性一样的效果。
*/
println(name + "-" + age + "-" + TestEmployee.company)
}
}
object TestEmployee{
//val表示常量。定义在半生对象中的属性可以起到java中静态属性的效果。
val company: String = "Tencent"
//在伴生对象中定义main方法以达到和java中静态main方法的效果。
def main(args: Array[String]): Unit = {
val employee = new TestEmployee("Lily", 29)
employee.printString()
}
}