首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

scala伴生类和伴生对象

伴生类和伴生对象 设计初衷 由于static定义类和对象破坏了 面向对象编程规范完整性,因此scala 在设计之初就没有static关键字概念,类相关静态属性都放在伴生对象object中。...其中伴生类和伴生对象需要同名。 在Scala里,类和伴生对象之间没有界限——它们可以互相访问彼此private字段和private方法。...创建语法 伴生对象属性可以直接使用类名进行调用;伴生类中属性,需要先实例化对象,才能够进行调用。 没有class,只有object则是单例模式类。...scala伴生类&伴生对象语法如下: class AssociatedDemo { val a:Int = 10; var b:Int = 2; } object AssociatedDemo...()).a); } } 输出结果: 伴生对象变量:变量1 伴生类变量:10 apply() apply()是一个语法糖,直接调用类(对象)名称时候,默认执行是该类(对象)apply()

76100

解析scala伴生类和伴生对象所属类

@ 目录 说在前面 运行原理 代码体现 解析 说在前面 scala是纯面向对象语言,C是纯面向过程语言,Java就是面向过程+面向对象语言。...在说到伴生对象之前,要先说到javastatic关键字,static关键字修饰变量、方法可以使类对象共享,而非某个对象单独拥有,所以是通过类名.变量名/方法名去调用。...而这违背了scala面向对象初衷,因为这没有通过对象去调用。...Scala是纯面向对象,去除了java中static关键字,通过伴生对象模拟static效果(类名.变量名/方法名) 伴生对象 伴随着某个类产生一个对象 当我们对源文件进行编译之后,默认会生成两个字节码文件...,一个是伴生类,另一个是伴生对象所属类 真正伴生对象伴生对象所属类中创建单例对象 如果不想默认生成伴生类,可以手动生成,要求伴生类名称和伴生对象名称一致 所以在scala程序中,如果要想实现static

80530
您找到你想要的搜索结果了吗?
是的
没有找到

原 荐 Scala面向对象

2)scala类同样通过class来进行声明。     3)scala类同样可以具有成员变量和成员方法。     4)scala类同样可以通过new关键字来创建出对象。     ...2)单例对象需要通过object关键字来声明。     3)一个单例对象可以单独存在,也可以绑定到一个类。     ...5)当一个单例对象和某个类写在同一个源文件中且共享同一个名字时,他们就产生了一个绑定关系。此时单例对象称为该类伴生对象。类称为该对象伴生类。     ...6)类和他伴生对象可以互相访问其私有成员。     7)以伴生方式为类增加静态成员成为了可能。     8)单例对象不能new,因此也没有构造参数。     ...val arr = Array[String](); 一篇:Scala集合类型

819130

Scala:面向对象、Object、抽象类、内部类、特质Trait(二)

Scala:面向对象、Object、抽象类、内部类、特质Trait 学习目标 掌握scala类与object用法 掌握继承用法 掌握trait(特质)用法 1....这个object称为伴生对象,这个class称为伴生伴生对象必须要和伴生类一样名字 伴生对象伴生类在同一个scala源文件中 伴生对象伴生类可以互相访问private属性 示例 示例说明 参考代码...伴生对象也不可以访问 示例 示例说明 定义一个Person类,包含一个name字段 定义Person类伴生对象,定义printPerson方法 测试伴生对象是否能访问private[this]权限成员...如果要求精确地判断出对象就是指定类对象,那么就只能使用 getClass 和 classOf 。...抽象类 和Java语言一样,scala中也可以定义抽象类 12.1 定义 如果类某个成员在当前类中定义是不包含完整,它就是一个抽象类 不完整定义有两种情况: 方法没有方法体(抽象方法) 变量没有初始化

78910

02.Scala:面向对象、Object、抽象类、内部类、特质Trait

Scala:面向对象、Object、抽象类、内部类、特质Trait 学习目标 掌握scala类与object用法 掌握继承用法 掌握trait(特质)用法 1....这个object称为伴生对象,这个class称为伴生伴生对象必须要和伴生类一样名字 伴生对象伴生类在同一个scala源文件中 伴生对象伴生类可以互相访问private属性 示例 示例说明 参考代码...伴生对象也不可以访问 示例 示例说明 定义一个Person类,包含一个name字段 定义Person类伴生对象,定义printPerson方法 测试伴生对象是否能访问private[this]权限成员...如果要求精确地判断出对象就是指定类对象,那么就只能使用 getClass 和 classOf 。...抽象类 和Java语言一样,scala中也可以定义抽象类 12.1 定义 如果类某个成员在当前类中定义是不包含完整,它就是一个抽象类 不完整定义有两种情况: 方法没有方法体(抽象方法) 变量没有初始化

1K10

Scala学习二-面向对象

一个class和obect具有相同名字,这个object称为伴生对象,这个class称为伴生类 注意: 伴生对象必须要和伴生类一样名字 伴生对象伴生类在同一个scala源文件中 伴生对象伴生类可以相互访问...()= println(s"猴子爱吃${eat.foodName}") } //定义伴生对象,用来保存食物香蕉,注意这个对象成员是静态变量 object Monkey{...Scala代码中可以在子类中使用override来重写父类成员,也可以使用super来引用父类成员.可以使用override来重新一个val字段。...asInstanceOf:将对象转换为指定类型 2.getClass/classOf:如果要求精确地判断出对象类型就是指定数据类型,那么就只能使用 getClass 和 classOf...如果要求精确地判断出对象类型就是指定数据类型,那就只能使用getClass和classOf来实现 getClass和classOf getClass可以精确获取对象类型 classOf[类名]可以精确获取数据类型

85921

C++对象成员引用 | 对象成员引用

C++通过对象名和成员运算符访问对象成员 C++不仅可以在类外引用对象公用数据成员,还可以调用对象公用成员函数,但同样必须指出对象名,应该注意所访问成员是公用还是私有的,只能访问public...stu.number=101; //假设num已定义为公用整型数据成员 表示将整数101赋给对象stu中数据成员number,其中.是成员运算符,用来对成员进行限定,指明所访问是哪一个对象成员...访问对象成员一般形式为  对象名. 成员名 C++在类外只能调用公用成员函数,在一个类中应当至少有一个公用成员函数,作为对外接口,否则就无法对对象进行任何操作。...C++通过指向对象指针访问对象成员 C++可以通过指针引用结构体中成员,用指针访 问对象成员方法与此类似。...在C++中,如果为一个对象定义了一个引用变量,它们是共占同一段存储单元,实际它们是同一个对象,只是用不同名字表示而已,因此完全可以通过引用变量来访问对象成员

2K64

大数据利器--Scala语言学习(基础)

1、Scala基本程序结构说明 scala //对 scala 基本程序结构说明 //1. object 是一个关键字,表示一个伴生对象 //2....1) Scala伴生对象采用 object 关键字声明,伴生对象中声明全是 “静态“内容,可以通过伴生对象名称直接调用。...2) 伴生对象对应类称之为伴生类,伴生对象名称应该和伴生类名一致。...3) 伴生对象属性和方法都可以通过伴生对象名直接调用访问 4) 从语法角度来讲,所谓伴生对象其实就是类静态方法和静态变量集合 5) 从技术角度来讲,scala 还是没有生成静态内容,只不过是将伴生对象生成了一个新类...4) 动态混入可以在不影响原有的继承关系基础,给指定类扩展功能。

99810

scala 学习笔记(04) OOP()主从构造器私有属性伴生对象(单例静态类)apply方法嵌套类

三、static成员/伴生对象Object/apply方法 scala里并没有static关键字,要达到类似的效果,可以借助object对象,object天然是singleton模式,比如下面的代码:...= { println("apply in Object People") new People(name) } } 后面的object People称为class People伴生对象...= People("jimmy") println(p.name) People.whoami 这里我们没有用new关键字来创建对象,而是"隐式"调用了伴生对象静态方式apply,以下是输出结果...: apply in Object People main constructor in Class People jimmy I am a people 伴生对象+apply方法,这是scala中经常使用一个技巧...从object使用上,还可以看出静态方法调用上scala与java不同,java中静态方法即可以用"类名.静态方法()",也可以用"对象实例.静态方法()"来调用,说实话,有点不太讲究,而Scala

88480

多面编程语言Scala

伴生对象伴生伴生对象伴生类在Scala面向对象编程方法中占据极其重要位置,例如Scala中许多工具方法都是由伴 生对象提供。...在Scala中,单例对象分为两种,一种是并未自动关联到特定类单例对象,称为独立对象 (Standalone Object);另一种是关联到一个类单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象...Java中类,可以既有静态成员,又有实例成员。...而在Scala中没有静态成员(静态字段和静态方法),因为静态成员从严格意义而言是破坏面向对象纯洁性,因此,Scala借助伴生对象来完整支持类一级属 性和操作。...实际,特质最终会被编译成Java接口及相应实现类。Scala特质提供特性远比Java接口灵活,让我们直接来看点有趣东西吧。 ? ? 我们先是定义了一个Programmer抽象类

2.5K40

大数据技术之_16_Scala学习_05_面向对象编程-中级

// 2、object Clerk 称为伴生对象 // 因为 scala 设计者将 static 拿掉了,他就设计了 伴生类 和 伴生对象 概念 // 将非静态内容放在 伴生类 中 // 将静态内容放在... 伴生对象 中 object Clerk { // 伴生对象   def test(c: Clerk): Unit = {     // 这里体现出:在伴生对象中,可以访问伴生私有属性 c.sal...// 2、object Clerk 称为伴生对象 // 因为 scala 设计者将 static 拿掉了,他就设计了 伴生类 和 伴生对象 概念 // 将非静态内容放在 伴生类 中 // 将静态内容放在... 伴生对象 中 object Clerk { // 伴生对象   def test(c: Clerk): Unit = {     // 这里体现出:在伴生对象中,可以访问伴生私有属性 c.sal...7.6.10 Scala 抽象类使用注意事项和细节讨论 ?

1.2K30

Scala

方法   4、样本类可以通过==来比较两个对象,不在构造方法内地属性不会用在比较 5.2 class   class是⼀个类   class在构造对象时候需要使⽤new关键字才可以。...7、scala伴生类和伴生对象是怎么一回事   在 Scala 中,每个类都可以有一个同名伴生对象(companion object),用于存放静态方法和属性,或者说是类级别的方法和属性。...伴生对象名称与类名称相同,但它们定义使用了 object 关键字而不是 class 关键字。   相对应伴生对象伴生类之间是有关联。...具体来说,一个类和它伴生对象必须在同一个源文件中定义,并且它们名称必须相同。   伴生类和伴生对象之间可以互相访问对方私有成员。...也就是说,伴生对象可以访问伴生私有成员伴生类也可以访问伴生对象私有成员

16530

Scala入门系列终章:类与对象

延续以上6篇推文,本文介绍类和对象,主要包括: 关于面向对象理解 类、对象和特质 伴生类(对象)、抽象类、样例类 01 关于面向对象理解 提到面向对象,首先就不得不讲述编程语言中范式概念。...03 伴生类(对象)、抽象类、样例类 最后介绍类几个拓展相关概念。...1)伴生类(对象)——Companions 在Scala中,当定义了一个同名class和object时,这个类和对象互为伴生,即这个class为object伴生类,这个object为class伴生对象...伴生要求就是同名,伴生好处就是可以互相访问对方属性和方法,甚至也因此带来一些实现便利。...2)抽象类——abstract class Scala中支持定义抽象类,这里抽象在于定义一些属性和方法时只给出声明而不提供具体赋值和逻辑,所以对于使用者而言是抽象(或者说不具体),定义方法只需在普通

44520

面向对象成员

私有成员 对于每一个类成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类内部才能方法 私有成员和公有成员访问限制不同: 静态字段(静态属性) 公有静态字段:类可以访问;类内部可以访问...__add() # 派生类中不能访问 私有方法 总结: 对于这些私有成员来说,他们只能在类内部使用,不能再类外部以及派生类中使用. *ps:非要访问私有成员的话,可以通过 对象....类其他成员 这里其他成员主要就是类方法: 方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。...原则,类方法是将类本身作为对象进行操作方法。假设有个方法,且这个方法在逻辑采用类本身作为对象来调用更合理,那么这个方法就可以定义为类方法。另外,如果需要继承,也可以定义为类方法。...因为我实例化是学生,但是如果我从学生这一个实例中获得班级总人数,在逻辑显然是不合理。同时,如果想要获得班级总人数,如果生成一个班级实例也是没有必要

82320

Scala 基础 (六):面向对象(下篇)

创作时间:2022 年 7 月 2 日 博客主页: 点此进入博客主页 —— 新时代农民工 —— 换一种思维逻辑去看待这个世界 ---- 文章目录 一、抽象类 二、单例对象伴生对象) 三...(伴生对象Scala是一门完全面向对象语言,没有静态操作。...单例对象对应类称之为伴生类,伴生对象名称应该和伴生类名一致,必须在同一个文件中。 单例对象属性和方法都可以通过伴生对象名(类名)直接调用访问。...Scala底层对于伴生对象apply方法进行了优化,调用时可以省略方法名,直接使用单例对象名称+调用apply方法参数 当使用 new 关键字构建对象时,调用其实是类构造方法,当直接使用类名构建对象时...,scala 会对所有的特质及其父特质按照一定顺序进行排序,而此案例中super.describe()调用实际是排好序后下一个特质中 describe()方法。

46110

大数据分析工程师面试集锦2-Scala

它写出程序像动态语言一样简洁,但事实它却是严格意义静态语言。总结起来就是面向对象和函数式完美结合。 2 什么是函数式编程?有什么优点?...面向对象类 对于面向对象考察更多是概念,如对象、类、抽象类、单例对象伴生对象、构造器、特质,如何继承?还需要关注重载、apply/unapply方法、包装语法。...28 什么是伴生对象伴生类? 在Scala中,单例对象object与class名称相同时,该对象被称为该类伴生对象,该类被称为该对象伴生类。...伴生类和伴生对象要处在同一个源文件中,伴生对象伴生类可以互相访问其私有成员,不与伴生类同名对象称之为孤立对象。 29 类参数加和不加关键字(val和var)有区别吗?...抽象类是在普通类基础增加了abstract关键字,无法对其进行实例化,它是用来被子类继承抽象类中可以只定义字段和方法,具体值和实现在其子类中实现,子类也可以进行重写。

2K20
领券