林子雨-2.3 面向对象编程基础
目录
1、类
private
中缀表示法
2、构造器
定义
主构造器和辅助构造器
3、对象(单例对象 singleton object)
单例对象
伴生对象
孤立对象
4、对象(apply方法)
5、对象(update方法和unapply方法)
update:
unapply:
6、类的继承
抽象类
扩展类
Option类
7、特质
定义及简介
混入了一个特质的类:
混入了多个特质的类
8、模式匹配
匹配字符
匹配字符串:
对不同的类型进行匹配:
有If的匹配
case class 类名:
模式实例与case:
9、包
1、类
class Counter{
//定义类中的字段和方法
}
val var
方法定义:def 方法名(参数列表):返回结果类型={方法体}
什么都不返回:Unit
实例化类:
scala中实例化(new)的时候可以不用()
private
尽量使用private:
完整的实例:
当没有方法参数的时候,可以省略圆括号,调用时也不能加圆括号 ;
如果不省略圆括号,那么调用时可以加圆括号也可以不加圆括号。
当只有一条语句时且大括号也可以省略。
使用value和value_来获取和更新私有成员privateValue的值。
且当编译器看到value和value_成对出现时,更新私有值的方法.value_=(3)可简写为
中缀表示法
方法只有一个参数时可以采用中缀调用法
val c=new Counter
c increment 5 //等价于c.increment(5)
返回值的类型省略
:Unit=被省略
Int被省略
2、构造器
定义
类的定义的主体叫构造器
主构造器的参数列表可以有 val 或 var 的属性,但普通的类不可以有。
加了 val 或 var 属性的参数列表会自动变成其类内部的成员字段
实例:
name字段会自动变成Counter类的内部字段,可以对其进行读写。
调用此name字段读写的方法:.name;.name_("Timer")等效于.name="Timer"
主构造器和辅助构造器
主构造器就是类本身的定义体
辅助构造器的第一个表达式必须调用此前已经定义好的辅助构造器或者是主构造器
辅助构造器的调用形式:this(参数列表)
先调用第一个辅助构造器再执行自己要执行的部分
c1:类名后没有参数,调用主构造器。
c2:与第一个辅助构造器匹配,调用第一个辅助构造器
第一个辅助构造器中又必须先执行主构造器,所以先输出“the main constructor”,再输出第一个辅助构造器中的内容
3、对象(单例对象 singleton object)
单例对象
字段方法都是静态的,不用进行实例化,可以直接用其中的方法。相当于Java中的静态实例。
实例:
直接通过Person对象调用自己的静态方法。
伴生对象
class A{...} //单例对象的伴生类 与Object A互为伴生关系
object A{...} //这里的object A是单例对象 同名类的伴生对象
两者定义在同一代码文件内
实例:
person2.info变成了2;注意什么时候动态什么时候静态
孤立对象
class B{...}
object A{...} //孤立对象
4、对象(apply方法)
apply方法是scala中独有的。
不用new对象,因为scala会自动调用该类(Array)的伴生对象Array类的apply方法创建一个数组对象。
apply方法不断生成对象。
工厂方法:生成对象
没有new的原理实例:
孤立对象MyTestApply的存在意义:Main函数的入口
apply存在的意义:
OO:对象.方法
函数式:函数名称(参数)
完美的实现函数调用(.apply(4,5))和函数调用(add(4,5))
函数式调用会自动转变成对象式调用(前提是已经定义好了apply方法)
5、对象(update方法和unapply方法)
update:
把0和"BigData"一起传入update方法实现数组元素的更新。所以是myStrArr(0)
scala已经定义好了Array的伴生类中的apply/update等方法。
unapply:
提取出对象的属性
unapply提取出brand和price两个属性
6、类的继承
抽象类
必须用abstract修饰
类中包含没有被实现的成员
只有类需要使用abstract
没给初值的抽象字段必须给出类型
扩展类
extends(表继承关系)
var不可被重载(本身就是可变的),val可以
greeting方法在父类中已经被实现,必须加override关键字,其余抽象方法重写时可以不加override关键字。
scala类的层次结构:
左边的值类型 被放入寄存器
右边的引用类型 被实例化的对象都被放到堆内存中
Nothing没有实例,只负责错误处理
Null:与Java兼容
Option类
在编程时,若返回值可能为空,最好将返回值类型设为Option
返回值为空时Option类返回None
返回值不为空时Option类会把值封装到some对象中进行返回
实例:
Book:case class:系统会自动帮case class写apply等方法
用了val,变成了成员对象。
Map也自己调用了apply方法(没有new)
Map的get方法的返回值是Option类,有值返回Some对象,空返回None。
Some对象自己还有get方法,None有getOrElse:
7、特质
定义及简介
相当于Java中的接口,但特质既可以定义抽象方法,也可以提供具体方法的实现。
scala中一个类继承于一个超类,但可以混入(mix)多个特质,这样可以重用特质的方法字段,间接实现多重继承。
特质实例:
定义特质中的抽象成员时不用加abstract关键字。
特质可以继承自其他特质。
混入了一个特质的类:
将定义好的特质和定义好的类放到同一个代码文件中时:
特质中的方法可以直接被调用:
混入了多个特质的类
继承了一个父类且混入了多个特质的类:with 特质名 with 特质名...
8、模式匹配
匹配字符
readChar表示需要从键盘上输入字符
_表示除了前面所有以外的。且match不用break,他会自动退出。
匹配字符串:
对不同的类型进行匹配:
有If的匹配
case class 类名:
scala将自动重载许多实用的方法,
且自动为case类生成伴生对象(apply工厂方法;unapply方法:把对象中的字段值提取出来)
模式实例与case:
case Car(brand,price):调用unapply方法提取值。
9、包
避免程序中的命名冲突,体现层次感。
不同的包可以进行前缀定义
通配符下划线:import *.*.*._
林子雨-2.3 面向对象编程基础相关推荐
- [.net 面向对象编程基础] (18) 泛型
[.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- matlab面向对象排序,matlab面向对象编程基础
matlab面向对象编程基础 觉得有用的话,欢迎一起讨论相互学习~ Matlab面向对象大体结构 类定义的普通模板 代码清单2.1.1 classdef className properties pr ...
- Day08 - 面向对象编程基础
面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法. 把一组数 ...
- python编程基础是什么-Python面向对象编程基础解析(一)
1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
[.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...
- Java面向对象编程(基础部分)
面向对象编程(基础部分) 类与对象 01: public class ObjectWorkDemo {public static void main(String[] args){Cat cat1 = ...
- java 168转换成861_java实验-java语言面向对象编程基础
java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...
- java面向对象程序_面向对象编程基础(java)
面向对象编程基础 1.1 面向对象概述 在程序开发初期,大家使用的是结构化开发语言,也就是面向过程(opp),但随着市场需求剧增,软件的规模也越来越大,结构化语言的弊端也暴露出来. 开发周期无休止的拖 ...
- [.net 面向对象编程基础] (22) 事件
[.net 面向对象编程基础] (22) 事件 事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是. ...
最新文章
- E201700525-hm
- python local global_python global与nonlocal关键字
- 怎么制作铁闸门_红茶拿铁
- openCV笔记(持续更新)
- RedisUtils工具类
- 苹果屏幕使用时间怎么设置_苹果手机屏幕不能旋转怎么办
- java 短链接url_Java 网址短链接服务原理及解决方案
- 360搜索下拉词下拉框获客方案分享
- 视频编解码(二):编解码器基础知识
- 解决EXE文件无法打开的问题!
- (Amazon)亚马逊GIF动态验证码识别,95识别率
- 一台电脑同时安装IE6、IE7、IE8三种浏览器
- MATLAB之易经卜卦程序+GUI
- 如何批量生成Flattermarken条码
- Excel VBA连接ORACLE数据库
- 聊聊Linux中的线程本地存储(1)——什么是TLS
- 女巫店2011年12星座年度运势分析
- DPDK实战之skeleton(basicfwd)
- GPT模型成功的背后用到了哪些以数据为中心的人工智能技术?
- 微信授权(前后端分离授权)