scala面向对象

来源:互联网 发布:java 多个文件打包zip 编辑:程序博客网 时间:2024/05/20 15:12

封装、继承、多态 其实不是面向对象的核心特征,只是语法层面的支撑。

面向对象的核心特征:

1.对象不用关心消息的来源和去向,只关心消息本身,即对象是弱耦合的、消息驱动的

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

3.面向接口编程


函数和方法的区别:
函数不依赖类,方法依赖于类


过程:

方法没有返回值


package com.sparktest/**  * 1.scala中定义类是用class关键字;  * 2.可以使用new ClassName的方式构建出类的对象  * 3.如果名称相同,则object中的内容都是class的静态内容,也就是说object中的内容class都可以在没有实例的时候直接去调用,  * 正是因为可以在没有类的实例的时候去调用object中的一切内容,所以可以使用object中的特定方法来创建类的实例,这个特定  * 的方法就是apply方法  * 4.object中的apply方式是class对象生成的工厂方法,用于控制对象的生成  * 5.很多框架的代码一般直接调用抽象类的objectapply方法去生成类的实例对象:  * 1apply具有类的对象生成的一切生杀大权,抽象类是不可以直接实例化的,在apply方法中可以实例化抽象类的子类,以Spark中的图计算  * 为例,Graph是抽象的class,object Graph中的apply方法实际上是调用了Graph的子类GraphImpl来构建Graph类型的对象实例的,从Spark  * 图计算的源码可以看出,GraphImpl的构造也是使用了object GraphImplapply方法  * 2)这种方式更加能够应对代码版本迭代(修改)的变化,这是更高意义的面向接口编程  * 6.object HelloOOPclass HelloOOP的伴生对象,class HelloOOP可以直接访问object HelloOOP中的一切内容,而class HelloOOP  * object HelloOOP的伴生类,object HelloOOP可以直接访问class HelloOOP的一切内容,一个特例是用private[this]修饰的成员  * 7.在定义scalaclass的时候,可以直接在类名后面()加入类的构造参数,此时在apply()中也必须有该参数  * 8.scala中可以在object中构建很多apply()  * 9.scala中的很多集合都是使用apply的方式构造的,例如:Array  */class HelloOOP(age: Int) {  val name = "Spark"  def sayHello = println {    "Hi,My name is " + name + "I'm " + age + "years old!"  }}object HelloOOP {  var number = 0  def main(args: Array[String]): Unit = {    println("Hello OOP!")    //val helloOOP = new HelloOOP    //val helloOOP = HelloOOP(10)    val helloOOP = HelloOOP()    helloOOP.sayHello  }  def apply(age:Int): HelloOOP = {    println("My name is " + number)    number += 1    new HelloOOP(age)  }  def apply(): HelloOOP = {    println("My name is " + number)    number += 1    new HelloOOP(10)  }}

0 0