第七课:零基础实战Scala面向对象编程

面向对象的三大特征:1.对象只需要关心消息处理本身,不需要关心消息哪里来,去哪里(也就是数据驱动)

2.一个对象的行为不会影响另外一个对象

3.面向接口编程

也就是说,Scala和Java都不是面向对象的语言,都只是支持面向对象的语言,用封装,继承,多态来支持者三大特征

 

函数:是独立的,不依赖于类的!!依赖于类的是方法!!

过程就是一个方法没有返回值

 

 

 

package com.dt.spark.scala.basics

 

/**

 * 1.在Scala定义类是使用class关键字

 * 2.可以使用new 类名 的方式构建出类的对象

 * 3.如果名称相同,则object中的内容是class的静态内容,也就是说object中的内容,

 * class都可以在没有实例的时候去调用,正是因为在没有类的实例的时候去调用object的一切内容,

 * 所以可以使用object中的特定方法来创建类的实例,而这个特定方法就是apply方法

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

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

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

 * 在apply方法中可以直接实例化抽象类的子类,以Spark的图计算为例,

 * Graph是抽象类,在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的时候,可以直接在类名后面(age:Int),可以在括号里面加入类的构造参数

 * 此时在apply方法中也必须有这些参数

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

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

 * /** Creates an array of `Int` objects */

  // Subject to a compiler optimization in Cleanup, see above.

  def apply(x: Int, xs: Int*): Array[Int] = {

    val array = new Array[Int](xs.length + 1)

    array(0) = x

    var i = 1

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

    array

  }

 *

 */

class HelloOOP(age:Int){

 

  var name="Spark"

 

  def sayHello(){

    println("Hello,"+name)

    println("my age is:"+age)

  }

}

 

object HelloOOP {

 

  var number=0

 

  def main(args:Array[String]){

    println("Hello OOP")

   

    val helloOOP=HelloOOP(20)

    helloOOP.sayHello()

  }

 

  def apply(age:Int): HelloOOP = {

    number += 1

    println("my number is:"+number)

    new HelloOOP(age)

  }

 

 

  def apply(): HelloOOP = {

    number += 1

    println("my number is:"+number)

    new HelloOOP(10)

  }

}

 

归纳总结:1.面向对象的三大特征

2.函数,方法和过程

3.object与class的关系,apply方法,使用apply方法的好处

4.Scala中类的构造方法,apply方法的重载

5.看看Array的构造

 

转载于:https://my.oschina.net/u/1449867/blog/723992

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值