首页 > 其他分享 >scala --半生对象

scala --半生对象

时间:2023-08-22 17:15:20浏览次数:35  
标签:半生 name scala -- ChildGameJava ScalaPerson class joinGame String

半生对象理解如图:

 

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

相关文章

  • Java中怎么进行原子操作?
    在Java中进行原子操作,特别是替换某个属性,你可以使用AtomicReference类来实现。AtomicReference可以保证对对象引用的原子更新操作。以下是一个示例,展示如何使用AtomicReference来进行原子替换操作:javaCopycodeimportjava.util.concurrent.atomic.AtomicReference;publ......
  • OS(八):存储器管理之请求分页存储管理方式
    请求分页系统建立在基本分页基础上,为能支持存储器功能增加了请求调页和页面置换功能。页面作为调入和换出的基本单位。1、请求分页的硬件支持1.1、页表机制页表将用户地址空间中逻辑地址变换为内存空间的物理地址。只将部分应用程序调入内存,页表增加若干项,详情如......
  • windows 安装mysql
    首先去下载Mysql文件我下载的是zip版本的 2.解压文件3.在解压的文件主目录下创建一个my.ini文件#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html#***DONOTEDITTHISFILE.It'sa......
  • 安卓中如何使用AsyncTask完成异步定时任务?
    在Android中,可以使用AsyncTask类来实现异步定时任务。下面是一个简单的例子,演示如何使用AsyncTask实现异步定时任务:javaCopycodeimportandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.widget.TextVi......
  • 笔试题
    目录stdcallcdeclstdcallcdecl__cdecl和__stdcall都是参数从右到左入栈。__cdecl是调用者负责清除栈中的参数,如A函数中调用B函数,参数由A函数负责清除;__stdcall是被调用者负责清除栈中的参数,如A函数中调用B函数,参数由B函数负责清除。......
  • PCB 中的丝印层
     感觉丝印层,在阻焊层之上。就是一些画框以及器件的标号。   ......
  • 《打印机篇》通过Spire.PDF打印pdf
    pdf打印插件(未验证)工具Spire.PDFfor.NET原文链接:https://www.zhihu.com/tardis/bd/art/482045596主要参考的是获取纸张的部分代码,即10、中的2、。工具Spire.PDFfor.NET获取方法1、通过官网下载。在程序中添加引用Spire.Pdf.dll,dll文件在安装路径下的bin文件夹中。......
  • spring-boot-starter
    springboot在配置上相比spring要简单很多,其核心在于spring-boot-starter,在使用springboot来搭建一个项目时,只需要引入官方提供的starter,就可以直接使用,免去了各种配置。starter简单来讲就是引入了一些相关依赖和一些初始化的配置命名规范:官方的starter:spring-boot-start......
  • 异构加速计算崛起,不应只是关注计算芯片
    原文标题:WhySYCL:ElephantsintheSYCLRoomByJamesReindersandMichaelWong摘录自:https://www.hpcwire.com/2022/02/03/why-sycl-elephants-in-the-sycl-room/Commentary— Inthesecondofaseriesofguestpostsonheterogeneouscomputing,JamesReinders,......
  • 教你使用临时邮箱
    ����ʹ����ʱ����ʲô����ʱ�����ʼ���һ���Ե����ʼ�����ʱ��һ���Ե����ʼ�������һ����ѷ���ֻ�赥��һ����ť����Ϊ���ṩ�����ʼ���ַ�����Ҳ���Ҫ�κθ�����Ϣ���ɻ�á���ʹ���ܹ��ڲ�ͬ����վ�������Ӧ�ó�����ע�ᣬȻ���ڲ��������ṩ���ĸ��˵����ʼ���ַ������½����������ʻ��ļ�������ʼ���Ϣ�......