面向对象总结

面向对象
1、scala包
1、声明包
1、在文件第一行通过package 包名
2、package 包名{
....
}
第二种方法,包名只能在target目录才能看到
2、导入包
1、导入包下所有类: import 包名._
2、导入包下多个类: import 包名.{类名1,类名2,..}
3、导入包下除开个别类的所有类型: import 包名.{不导入的类名=>_,_}
4、给类起别名: import 包名.{类名=>别名}
3、包对象
1、语法: package object 包名
包对象中定义变量、方法、函数在包中任何地方都可以使用
2、类和对象
1、类
1、语法: class 类名
2、定义属性:
class 类名{
val/var 变量:变量类型 = 值
//var定义的变量可以通过_赋予初始值:null、0、false、0.0
}
3、定义方法: 与之前定义方法的语法一样
2、对象: new 类名
3、构造器
1、主构造器: 列名后面的()代表主构造器。在主构造器中可以定义成员属性
class 类名(val 属性名:类型[= 默认值],var 属性名:类型 [= 默认值], 属性名:类型[=默认值])
在主构造器中定义属性的时候:val\var\不带val、var的区别:
val:不可修改,有默认的get方法
var:可以修改,有默认的get\set方法
不带val、var: 只能在类中使用。而且如果该属性没有在class中使用,相当于没有。如果使用,则会生成一个private的属性。只是这个属性没有get/set方法
2、辅助构造器:
1、语法: def this(参数名:参数类型,...) = {
//第一行调用其他的辅助构造器或者主构造器
}
辅助构造器可以重载
4、构造器参数:
1、主构造器中属性可以给默认值
2、在创建对象的时候,可以通过带名参数来指定将值赋给哪个属性
5、封装: *****
为了兼容java,生成java的get/set方法。
只需要在属性名上面添加注解:@BeanProperty。
6、继承: 语法和java一样,都是通过extends关键字实现继承
哪些不能够被继承:
1、final修饰的class不能被继承
2、private修饰的成员变量、成员方法不可被继承
哪些不能够被重写
1、final修饰的val定义的属性不可用被重写
2、var修饰的属性不可以被重写
重写: 通过override关键字标识方法/属性被重写
7、多态:
1、java中多态是表现在方法上
2、scala中方法和属性都会多态
8、抽象类: 通过abstract关键字标识类为抽象类
1、抽象类中既可以定义抽象方法[没有方法体]也可以定义具体方法
2、抽象类中既可以定义抽象属性[没有赋初始值的属性]也可以定义具体属性
3、匿名子类:
new 抽象类{
//实现抽象类的抽象方法和抽象属性
}
9、伴生类和伴生对象
需要满足两个条件:
1、class名和object名一样
2、class与object在同一个源文件中
class称之为伴生类,object伴生对象
伴生类和伴生对象相互之间可以调用对方的私有属性或者方法
apply方法:
apply方法定义在伴生对象中
使用来简化伴生类实例的创建 def apply(变量名:变量类型,..) = new 伴生类(变量名,..)
有了apply方法之后,后续创建伴生类实例的时候就可以通过以下方式创建:
1、类名.apply(值,..)
2、类名(值,...)
上面两种形式是完全等价
10、特质
1、定义语法: trait 特质名{...}
2、scala中是单继承,多混入
3、特质和抽象类很像,都是既可以定义抽象方法也可以定义具体的方法
既可以定义抽象属性也可以定义具体的属性
4、如何混入特质?
1、如果子类需要继承父类,先通过extends关键字继承父类,后面通过with关键字混入特质
2、如果子类不需要继承父类,第一个特质通过extends关键字混入,其他的特质通过with关键字混入
5、子类混入多个特质,这多个特质中都是同名的方法,如何处理?
1、如果这多个特质没有关系[没有相同的父类/父特质]:
直接重写同名方法。如果重写之后,在方法体中需要调用父特质同名的方法。只会调用最后一个特质的同名方法
2、如果这多个特质有关系[属于同一个父特质]
直接重写同名方法。如果重写之后,在方法体中需要调用父特质同名的方法。根据混入的顺序,从右往左开始调用,共同父特质的同名方法最后才调用
class A extends B with C with D{
overirde def m1() = {
println("...")
super.m1()
}
}
B、C、D继承AA
A[m1]->D[m1]->C[m1]->B[m1]->AA[m1]
6、对象混入:
语法: new 对象 with 特质名
通过对象混入,可以实现将某些对象有特质的特征[属性/方法/函数]
7、特质的自身类型:
语法:
trait 特质名{
this:类型=> //子类要想混入当前的特质,必须继承/混入指定的class/trait
}
11、扩展
1、类型检查、转换 *****
对象.isInstanceOf[类型] : 用来判断对象是否属于某个类型
对象.asInstanceOf[类型]: 用来将对象转为指定的类型
对象.getClass: 获取对象的class形式
classOf[类名]: 获取类的class形式
2、枚举类、应用类:
枚举类: 继承 Enumeration
应用类: 继承 App
继承App之后,就可以不用写main方法。在object中的代码就是相当于写在main方法里面
3、type定义新类型: 给类起别名
type s = String
val name:s = "xxx"

Scala(八)【面向对象总结】的更多相关文章

  1. Scala之面向对象

    1. Scala基础练习 不使用str.toLong,str.toInt/Integer.valueOf()/Long.valueOf/Integer.parseInt()等,将字符串"12 ...

  2. Scala语言面向对象

    apply1. 面向对象的基本概念: 把数据及对数据的操作方法放在一起,作为一个相互依存的整体-----对象,面向对象的三大特征:封装.多态.继承 2. scala类的定义 · class Emplo ...

  3. Scala学习——面向对象

    Scala面向对象 三大特征:封装.继承.多态 1.类的定义和使用 package top.ruandb.scala.Course02 object Simple { def main(args: A ...

  4. python基础(八)面向对象的基本概念

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对 ...

  5. scala的面向对象编程

    1.scala的简单编程 2.构造方法 辅助构造函数是在主构造函数没有的情况下,执行的构造函数. 3.object的介绍 4.半生类和半生对象 5.半生的案例程序(半生类可以调用半生) 6.apply ...

  6. python运维开发(八)----面向对象(下)

    内容目录: 面向对象三大特性之多态性 面向对象中的成员:字段.方法.属性 类的成员修饰符 类的特殊成员 特殊成员方法 面向对象其他 异常处理 设计模式之单例模式 面向对象的多态性 多态性:即指多种形态 ...

  7. 第2节 Scala中面向对象编程:12、13、14、15、16、trait

    6.4.  Scala中面向对象编程之trait 6.4.1.    将trait作为接口使用 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java ...

  8. 第2节 Scala中面向对象编程:9、getClass和classOf;10、调用父类的constructor;11、抽象类和抽象字段;

    6.3.4.     Scala中getClass 和 classOf Class A extends class B B b=new A    b.getClass ==classOf[A] B b ...

  9. 第2节 Scala中面向对象编程:7、继承的概念以及override和super关键字;8、isInstanceOf 和 asInstanceOf关键字

    6.3.   Scala面向对象编程之继承 6.3.1.     Scala中继承(extends)的概念 Scala 中,让子类继承父类,与 Java 一样,也是使用 extends 关键字: 继承 ...

随机推荐

  1. Python ImportError: No module named '_tkinter', please install the python3-tk package

    ImportError: No module named '_tkinter', please install the python3-tk package 这个问题的原因是使用的python3环境内 ...

  2. Python matplotlib 概率论与数理统计 伯努利分布 二项分布

    Python 代码实现 二项分布 import numpy as np import matplotlib.pyplot as plt import math from scipy import st ...

  3. DeWeb 简介

    DeWeb是一个可以直接将Delphi程序快速转换为网页应用的工具! 使用DeWeb, 开发者不需要学习HTML.JavaScript.Java.PHP.ASP.C#等新知识,用Delphi搞定一切. ...

  4. 绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源

    绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源 不管你对 "RGB性能狂升300%" 的梗认同不认同,不可否认,绚丽的彩色很是酷炫,在现在市面上带"灯& ...

  5. SpringCloud 2020.0.4 系列之 JWT用户鉴权

    1. 概述 老话说的好:善待他人就是善待自己,虽然可能有所付出,但也能得到应有的收获. 言归正传,之前我们聊了 Gateway 组件,今天来聊一下如何使用 JWT 技术给用户授权,以及如果在 Gate ...

  6. TTMS 一个基于Java Swing的Socket通信的剧院票务管理系统

    TTMS (Theater Ticket Management System) 点我进入github TTMS全称剧院票务管理系统,分为客户端和服务器端.服务器端可以接收客户端连接请求,客户端相当于我 ...

  7. 腾讯发布 K8s 多集群管理开源项目 Clusternet

    11月4日,在腾讯数字生态大会上,腾讯宣布了云原生领域一项重磅开源进展-- K8s 多集群管理项目 Clusternet 正式开源. Clusternet 由腾讯联合多点生活.QQ音乐.富途证券.微众 ...

  8. OpenHarmony LiteOS C-SKY指令集移植指北

    摘要:本文介绍在OpenHarmony社区LiteOS-M项目中新增C-SKY指令集的开发流程,以及适配相应qemu工程的方法和步骤,供LiteOS内核相关开发者学习交流. 本文分享自华为云社区< ...

  9. Part 34 AngularJS controller as vs scope

    There are 2 ways to expose the members from the controller to the view - $scope and CONTROLLER AS. T ...

  10. Python批量爬取谷歌原图,2021年最新可用版

    文章目录 前言 一.环境配置 1.安装selenium 2.使用正确的谷歌浏览器驱动 二.使用步骤 1.加载chromedriver.exe 2.设置是否开启可视化界面 3.输入关键词.下载图片数.图 ...