/**

* 1,在Scala中定义类是用class关键字;

* 2,可以使用new ClassName的方式构建出类的对象;

* 3, 如果名称相同,则object中的内容都是class的静态内容,也就是说object中的内容class都可以在没有实例的时候直接去调用;

*      正是因为可以在没有类的实例的时候去调用object中的一切内容,所以可以使用object中的特定方法来创建类的实例,而这个特定方法

*      就是apply方法;

* 4,object中的apply方式是class对象生成的工厂方法,用于控制对象的生成;

* 5, 很多框架的代码一般直接调用抽象类的object的apply方法去生成类的实例对象:

*      第一:其秘诀在于apply具有类的对象生成的一切生杀大权,抽象类是不可以直接实例化的,在apply方法中可以实例化抽象类的

*              子类,以Spark中的图计算为例,Graph是抽象的class,在object Graph中的apply方法实际上是调用了Graph的子类GraphImpl来构建

*              Graph类型的对象实例的,当然从Spark图计算的源码可以看出,GraphImpl的构造也是使用了object GraphImpl的apply方法;

*      第二:这种方式神奇的效应在于更加能够应对代表版本迭代或者修改的变化,这是更高意义的面向接口编程;

*  6,object HelloOOP是class HelloOOP的伴生对象,class HelloOOP可以直接访问object HelloOOP中的一切内容,而class HelloOOP是object HelloOOP

*      的伴生类,object HelloOOP可以直接访问class HelloOOP的一切内容,一个特例是用private[this]修饰的成员,我们会在后面讲解。

*  7, 在定义Scala的class的时候可以直接在类名后面()里加入类的构造参数,此时在apply方法中也必须有这些参数;

*  8,scala中可以在object中构造很多apply方法;

*  9, Scala中的很多集合都是使用apply的方式构造的,例如Array:

*

*      def apply[T: ClassTag](xs: T*): Array[T] = {

*   val array = new Array[T](xs.length)

*   var i = 0

*   for (x <- xs.iterator) { array(i) = x; i += 1 }

*   array

* }

*/

 package com.dtspark.scala.basics
 class HelloOOP(age:Int){

   var name = "Spark"

   def sayHello = {

     println("Hi, My name is " + name)

     println("I am " + age + " years old")

   }

 }

 object HelloOOP {

   var number = 0

   def main(args: Array[String]): Unit = {

     println("Hello Scala OOP!!!")

 //    val helloOOP = new HelloOOP

     val helloOOP = HelloOOP()

     helloOOP.sayHello

     Array(1,2,3,4,5)

   }

   def apply(): HelloOOP = {

     println("My number is : " + number)

     number += 1

     new HelloOOP(10)

   }

   def apply(age:Int): HelloOOP = {

     println("My number is : " + number)

     number += 1

     new HelloOOP(age)

   }

 }

Scala之OOP的更多相关文章

  1. 怎样学习Scala泛函编程

    确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...

  2. scala泛函编程是怎样被选中的

    现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求:无论处理器变得能跑多快,都无法满足软件对计算能力的需要.按照摩尔定律(Moore's Law)处理器(CPU)每平方面积上包含的半导体 ...

  3. Scala中function的理解

    在函数式语言中,函数是和value一样地位的一等公民,他可以作为变量,或者作为参数传递给另一个函数 ##作为变量 val f=(x:Int)=>x+1 为啥可以这样写? 由于scala是OOP, ...

  4. scala 学习笔记(06) OOP(下)多重继承 及 AOP

    一.多继承 上篇trait中,已经看到了其用法十分灵活,可以借此实现类似"多重继承"的效果,语法格式为: class/trait A extends B with C with D ...

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

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

  6. Scala OOP

    Scala OOP 1.介绍 Scala是对java的封装,底层仍然采用java来实现,因此Scala也是面向对象的.其中scala给出了class.object和trait三种面向对象的组件.

  7. scala 学习笔记(05) OOP(中)灵活的trait

    trait -- 不仅仅只是接口! 接上回继续,scala是一个非常有想法的语言,从接口的设计上就可以发现它的与众不同.scala中与java的接口最接近的概念是trait,见下面的代码: packa ...

  8. Scala Macros - scalamela 1.x,inline-meta annotations

    在上期讨论中我们介绍了Scala Macros,它可以说是工具库编程人员不可或缺的编程手段,可以实现编译器在编译源代码时对源代码进行的修改.扩展和替换,如此可以对用户屏蔽工具库复杂的内部细节,使他们可 ...

  9. Beginning Scala study note(3) Object Orientation in Scala

    1. The three principles of OOP are encapsulation(封装性), inheritance(继承性) and polymorphism(多态性). examp ...

随机推荐

  1. python简单爬虫定时推送同花顺直播及荐股至邮箱

    1.初衷:实践 2.技术:python requests Template 3.思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票 4.思路:python 编辑简单邮件html模板 ...

  2. sql server 索引分析相关sql

    select object_id('dbo.FT_CFP_TRADE_SUBACCOUNT') select * from sys.partitions where [object_id]=14672 ...

  3. arcgis 随手记

    1,ArcGISDynamicMapServiceLayer   3.0  用  4.1 以后用MapImageLayer 代码如下: <!DOCTYPE html> <html&g ...

  4. 多CPU下基于e1000e驱动的数据包以及网卡中断流程分析.doc

    http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WD ...

  5. java enum(枚举)的使用

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...

  6. RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别

    RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整 ...

  7. 玩转Windows Azure存储服务——网盘

    存储服务是除了计算服务之外最重要的云服务之一.说到云存储,大家可以想到很多产品,例如:AWS S3,Google Drive,百度云盘...而在Windows Azure中,存储服务却是在默默无闻的工 ...

  8. Hacker communities collection

    Copy from E安全 Hack Forums: Hack Forums是目前最为理想的黑客技术学习根据地.该论坛不仅在设计上面向黑客群体,同时也适用于开发人员.博主.游戏开发者.程序员.图形设计 ...

  9. bzoj-4517 4517: [Sdoi2016]排列计数(组合数学)

    题目链接: 4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 846  Solved: 530[Submit][ ...

  10. 03 Hibernate错题分析

    1.在Hibernate中,以下关于主键生成器说法错误的是( C). A.increment可以用于类型为long.short或byte的主键 B.identity用于如SQL Server.DB2. ...