Scala 面向对象编程-1

 

  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的子类,来构建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

     

  10. class HelloOOP(age:Int){
      var name ="Spark"
      def sayHello = println("Hi,my name is "+name+" 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(30)
        helloOOP.sayHello
      }
      
      def apply(age:Int):HelloOOP = {
        println("My number is :"+number)
        number+=1
       // var age =10
        new HelloOOP(age)
      }
      
    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值