scala面向对象

    xiaoxiao2021-12-14  18

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

    面向对象的核心特征:

    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) } }

    转载请注明原文地址: https://ju.6miu.com/read-962937.html

    最新回复(0)