/**
 * 如果有这些语法的支持,我们说这门语言是支持面向对象的语言
 * 其实真正面向对象的精髓是不是封装、继承、多态呢?
 * --->肯定不是,封装、继承、多态,只不过是支撑面向对象的
 * 一些语言级别的语法和功能,真正的面向对象其实有三个核心特征:
 * 第一:对象不用关心消息从哪里来,也不关心消息到哪去,只关心消息处理本身
 * ,也就是说面向对象是弱耦合的且对象是消息驱动的,或者说对象是数据驱动的
 * 第二:一个对象的行为不影响另一个对象的行为,一个对象挂掉了另一个对象
 * 不会随着它一起挂掉
 * 第三:面向接口编程,为了封装具体实现的不同和业务的变化
 * 那么从这个角度讲,Java语言和Scala语言都不是面向对象的语言,Java和Scala
 * 都是"支持"面向对象的语言,它用他的封装、继承、多态来支持面向对象的三大核心特征
 * 或者说功能
 * 
 * 函数:不依赖于类的
 * 
 * 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 C7是class C7的伴生对象,class C7可以直接访问
 * object C7中的一切内容,而class C7是object C7的伴生类
 * ,object C7可以直接访问class C7的一切内容,一个特例是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
 *   }
 * 
 */ 
---------------------
作者:张涵钧
来源:CSDN
原文:https://blog.csdn.net/shunhack/article/details/52587834
版权声明:本文为博主原创文章,转载请附上博文链接!

Scala实战高手****第7课:零基础实战Scala面向对象编程及Spark源码解析的更多相关文章

  1. Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析

    Scala函数式编程 ----------------------------------------------------------------------------------------- ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  3. Scala实战高手****第4课:零基础彻底实战Scala控制结构及Spark源码解析

    1.环境搭建 基础环境配置 jdk+idea+maven+scala2.11.以上工具安装配置此处不再赘述. 2.源码导入 官网下载spark源码后解压到合适的项目目录下,打开idea,File-&g ...

  4. Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析

    本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...

  5. 「从零单排canal 04」 启动模块deployer源码解析

    基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_read ...

  6. spark源码解析之scala基本语法

    1. scala初识 spark由scala编写,要解析scala,首先要对scala有基本的了解. 1.1 class vs object A class is a blueprint for ob ...

  7. Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏

    本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...

  8. Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏

    /** * 函数式编程进阶: * 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量 * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称 ...

  9. Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

随机推荐

  1. 利用WebStorm来管理你的Github

    什么是Github Github是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目,以最简单的方式来说,其实就是一个代码库,上面有全世界无数优秀的码农上传自己的作品和大家共享(当然 ...

  2. Python爬虫学习笔记之爬今日头条的街拍图片

    代码: import requests import os from hashlib import md5 from urllib.parse import urlencode from multip ...

  3. Cannot read property 'resetFields' of undefined 问题及引申

    问题描述: 使用element开发我的后台系统,编辑和新增使用了同一个弹出框<el-dialog><el-form></el-form></el-dialog ...

  4. BZOJ 1598 牛跑步

    牛跑步 [问题描述] BESSIE准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘, 然后走回牛棚. BESSIE也不想跑得太远,所以她想走最短的路经. 农场上一共有M ...

  5. bzoj 1022 SJ定理

    与传统的SG游戏不同的是,完成最后一个状态的人是输的,我们把这一类问题称作Anti-SG,这类问题的解决我们需要引入一个定理—SJ定理: 对于任意一个Anti-SG游戏,如果我们规定当局面中所有的单一 ...

  6. 常见协议基础知识总结--FTP协议

    FTP协议是一种基于客户端和服务器的文件传输协议,属于应用层协议,基于传输层的TCP协议: FTP主要分成主动模式和被动模式两种传输方式, 方式是相对服务器而言的,服务器主动发起数据连接即主动方式,使 ...

  7. measure time program

    #include <time.h> int delay(int time) { int i,j; for(i =0;i<time;i++) for(j=0;j<10000;j+ ...

  8. PL/SQL 09 包 package

    --定义包头 create or replace package 包名as  变量.常量声明;  函数声明;  过程声明;end; --定义包体 create or replace package b ...

  9. Ubunt 服务教程集锦

    1.Ubuntu管理服务安装(强烈推荐最好用Xshell和Xftp): 序号 服务名 介绍 教程地址 windows客户端 1 VNC 可以图形界面管理Ubuntu ubuntu安装vncserver ...

  10. C#字节数组的常用解码处理方法

    在某些情况下,比如说串口通信或者读取二进制的文件,通常会得到一个byte数组形式的数据. 然而对于这个数据处理常常令人苦恼,因为通常通信情况下,并不是一个字节代表一个字符或者某个数据,而是数据夹杂在字 ...