半生对象理解如图:
object Accompany {
def main(args: Array[String]): Unit = {
println(ScalaPerson.sex) // 底层等价于 ScalaPerson$.MODULE$.sex()
ScalaPerson.sayHi() // 底层等价于 ScalaPerson$.MODULE$.sayHi()
}
/**
* 说明:
* 1、当在同一个文件中,有 class ScalaPerson和 object ScalaPerson
* 2、class ScalaPerson 称为半生类,将非静态的内容写到该类中
* 3、object ScalaPerson 称为伴生对象,将静态内容写到该对象(类)
* 4、class ScalaPerson 编译后底层生成 ScalaPerson.class
* 5、object ScalaPerson 编译后底层生成 ScalaPerson$.class
* 6、对于半生对象的内容可以直接通过 ScalaPerson.属性或者方法
*
*/
class ScalaPerson{
var name: String = _
}
object ScalaPerson{
var sex:Boolean = true
def sayHi() ={
println("hi")
}
}
}
具体实例,用java版本和scala版本实现小孩游戏统计功能:
Java版本如下:
public class ChildGameJava {
private String name;
static int count = 0;
public ChildGameJava(String name){
this.name = name;
}
public static void joinGame(ChildGameJava child){
System.out.println( child.name + "加入游戏");
count ++;
}
public static void show(){
System.out.println("当前玩游戏的小孩数量是:" + count);
}
public static void main(String[] args) {
ChildGameJava child1 = new ChildGameJava("aaa");
ChildGameJava child2 = new ChildGameJava("bbb");
ChildGameJava child3 = new ChildGameJava("ccc");
ChildGameJava.joinGame(child1);
ChildGameJava.joinGame(child2);
ChildGameJava.joinGame(child3);
ChildGameJava.show();
}
}
运行结果:
scala版本如下:
object ChildGameScala {
def main(args: Array[String]): Unit = {
val c1 = Child("aaa")
val c2 = Child("bbb")
val c3 = new Child("ddd")
joinGame(c1)
joinGame(c2)
joinGame(c3)
show()
}
}
class Child(cname: String) {
val name = cname
}
object Child {
//可以实现用类名(参数)方式创建对象实例
def apply(cname: String)={
new Child(cname)
}
var count = 0
def joinGame(child: Child) = {
println(s"${child.name}加入游戏")
count += 1
}
def show()={
println(s"当前玩游戏的小孩数量是:${count}")
}
}
运行结果:
总结:scala中半生对象为了能够实现java中的静态属性和方法。
标签:半生,name,scala,--,ChildGameJava,ScalaPerson,class,joinGame,String From: https://www.cnblogs.com/toto-sc/p/17649022.html