Scala之面向对象

目录
Scala包:
基础语法:
Scala包的三大作用:
包名的命名规范:
写包的好处:
包对象:
导包说明:
类和对象:
定义类:
封装:
构造器:
主从构造器的加载机制:
继承:
基础语法:
抽象属性:
多态:
Java中的多态测试
Scala测试如下:
Scala的面向对象思想和Java是一致的
Scala包:
基础语法:
package 包名.类名
Scala包的三大作用:
区分相同名字的类
当类很多时,可以很好的管理类
控制访问范围
包名的命名规范:
一般是小写字母+小圆点
com.公司名.项目名.业务模块名
写包的好处:
在maven中可以将自己写的包通过maven导入到项目中
在Scala中独有的包的写法 和文件夹不对应 可以独立存在
下图是我在类下边建的包,和正常的包一样使用

包是可以嵌套的
内层调用外层 不需要导包 atguigu包在techer下
外层调用内层 对象 需要导包
如下代码:
package chapter04
object Test_01_package {def main(args: Array[String]): Unit = {}
}
//Scala独有的
package techer {import chapter04.techer.atguigu.Innerobject test01t {def main(args: Array[String]): Unit = {println("hello 我是大哥 pack")//外层调用内层 对象 需要导包//Inner.main是下边那个包中的Inner.main(args)}}package atguigu {object Inner {def main(args: Array[String]): Unit = {println("Inner")//内层调用外层 不需要导包 atguigu包在techer下test01t.main(args)}}}
}
包对象:
在Scala中包也是面向对象的,只要在包的内部(只要在内部都可以,内层的嵌套也可以),都可以直接调用包对象的属性和方法
如果包有嵌套,会出现覆盖的情况,则会调用距离最近的包的属性与方法(包距离最近则会后调用,会覆盖先前调用的)
导包说明:
导包是不支持嵌套的(导包后只能用它下边的类和对象,不能再用它下边的包,如果想使用它下边包中的方法,就需要使用 . 但是当我们导包直接导入它下边的包 就可以直接调用,不需要用 . 来使用)
类和对象:
我们在使用对象的时候,会以类为模板创建对象
定义类:
在Java中一个文件中只能有一个public
在Scala中 默认的是public 但是它在一个文件中可以创建多个伴生类和伴生对象
封装:
在Scala中属性只有两种 可变(var)与不可变(val)(分离了读写权限----类似与面向对象中的封装(封装get set 方法 是为了分离读写权限))
在Scala直接通过属性的类型来分离
在Scala中属性的类型已经封装成 var----private val----private final
并且get set方法也已经封装(封装成了注解,在使用get set方法的时候需要 先引入注解@BeanProperty----不过该注解的作用域只有一个属性 意思是 一个属性需要设置一个注解)
构造器:
面向对象的语言基本都有构造器(构造方法),如果在类中不写构造方法 默认构造器为空参构造方法
在Scala中也有构造器,与Java不同,
Scala的构造器是在类名上加个() 是主构造器(主构造器无参的时候可以省略() 表示默认是可以无参构造的 类同Java)
有主构造器就一定有从构造器
在主构造器的内部可以定义辅助构造器 定义的格式是固定的,在从构造器的内部第一行代码必须是直接或者间接的调用主构造器
class Person03(name:String){var name1:String=name
def this(){this("唐不唐")println("hello world")}
}
主从构造器的加载机制:
在Scala中没有类加载机制,所以在代码直接调用辅助构造器的时候它是不知道类中的内容的, 所以上边要求(从构造器的内部第一行代码必须是直接或者间接的调用主构造器),这就是原因所在,获取类信息(加载一遍),调用完后才会返回从构造器继续执行
根据main方法中你的参数决定你调用那个构造器
从构造器是有先后顺序的,后边的只能调用前面的(所调用的构造器必须在本构造器之前)
从构造器的名称统一为this(根基参数的个数来区分)
主构造器是可以传参的 参数可以当作属性来使用(参数类型如果省略,默认val)
继承:
继承关键字:extends
基础语法:
子类继承父类的属性和方法
继承的本质:其实与Java是完全不一样的
在创建子类的对象时,Scala会先创建父类的对象让后在外层创建子类对象(同Java)
Scala继承的本质就是继承父类的一个构造器(继承那个构造器(参数个数来区别)就会调用那个)
抽象属性:
就是不写等号,写抽象方法需要把类改成抽象类
抽象属性在使用的时候需要继承它 让后需要重写属性和方法(在Java中是不需要重写属性的,因为Scala底层是对属性进行封装,自带方法)
在重写抽象类中的非抽象方法的时候需要在重写的方法前面加上 override 关键字
子类调用父类的方法的时候使用关键字super
子类对抽象属性进行实现,父类抽象属性可以用 var 修饰;
多态:
父类的引用指向子类的实例
Java中的多态测试
:在父子共有的属性和方法调用的是父类还是子类:
public class Polymorphic {public static void main(String[] args) {Person person=new Student();System.out.println(person.name);person.sayhi();}public static class Person{String name="Person";public void sayhi(){System.out.println("person sayhi");}}
public static class Student extends Person{String name="Student";public void sayhi(){System.out.println("student sayhi");}
}}
属性是调用父类 方法是调用子类
在进行多态的时候是先将整个内存先把父类写入里面,再把子类嵌套到外边
引用是使用栈 把地址值是先指向父类的 指向谁就调用谁的属性,但是调用方法是一层一层的调用,是不断的被重写的,所以方法是调用子类

而Scala与Java不同 都是调用的子类的
Scala测试如下:
package chapter04object Test07_Polymorphic {def main(args: Array[String]): Unit = {val per:Person07=new Student07per.sayhi();println(per.name)}
}
class Person07()
{val name:String="dsdsd"
def sayhi():Unit={println("hi person")
}
}
class Student07 extends Person07{override val name: String = "Student"
override def sayhi(): Unit ={println("Student say hi")}
}

匿名子类:
可以使用匿名子类直接调用抽象类
也可以直接new这个抽象子类
匿名子类是自动使用多态的
多态无法调用子类独有的属性和方法,外部无法使用匿名子类中特有的(它自己的)方法和属性
相关文章:
Scala之面向对象
目录 Scala包: 基础语法: Scala包的三大作用: 包名的命名规范: 写包的好处: 包对象: 导包说明: 类和对象: 定义类: 封装: 构造器: 主从…...
深度学习目标检测项目实战(四)—基于Tensorflow object detection API的骨折目标检测及其界面运行
深度学习目标检测项目实战(四)—基于Tensorflow object detection API的骨折目标检测及其界面运行 使用tensorflow object detection进行训练检测 参考原始代码:https://github.com/tensorflow/models/tree/master/research 我用的是1.x的版本 所以环境必须有gpu版…...
嵌入式工程师如何快速的阅读datasheet的方法
目录 ▎从项目角度来看datasheet ▎各取所需 ▎最后 Datasheet(数据手册)的快速阅读能力,是每个工程师都应该具备的基本素养。 无论是项目开始阶段的选型还是后续的软硬件设计,到后期的项目调试,经常有工程师对着英…...
(三)合约广告
1. 广告位(CPT)合约 系统:广告排期系统 网站把某一个广告位卖给广告商,这段时间归广告商所有,到点了下线 (1)流量选择的维度:时间段、地域等 (2)典型场景…...
【Android -- 软技能】分享一个学习方法
前言 很多人都想通过学习来提升自己,但是,可能因为两个问题,阻碍了自己的高效提升: 学什么? 怎么学? 本文将从自己的学习实践出发,针对这两个问题,给出自己的一套学习流程。 1…...
Python-DQN代码阅读(10)
目录 1.代码 1.1 代码阅读 1.2 代码分解 1.2.1 f open("experiments/" str(env.spec.id) "/performance.txt", "a") 1.2.2 f.write(str(ep) " " str(time_steps) " " str(episode_rewards) " " str(…...
MongoDB入坑
MongoDB入坑一、体系架构1、简介2、MongoDB VS RDBMS3、文件4、体系结构二、权限管理1、开启2、角色三、存储引擎四、备份 & 恢复五、高可用0、主从复制1、副本集2、分片一、体系架构 1、简介 DBMS No.5;NoSQL Document No.1 1)BSON BSON(Binary …...
【论文总结】针对操作系统级虚拟化的抽象资源攻击
介绍 这是一篇来自2021CCS的论文,作者有Nanzi Yang, Wenbo Shen, Jinku Li, Yutian Yang, Kangjie Lu, Jietao Xiao, Tianyu Zhou, Chenggang Qin, Wang Yu, Jianfeng Ma, Kui Ren。 概述 本文的贡献如下: 新的攻击面:作者揭示了一个影响操…...
C# 提取 PDF 文档中的文本
C# .Net 使用 IText7 从PDF文件中提取出所有文本内容 【文 / 张赐荣】 首先在 Nuget 包管理器中,安装"itext7" 和 "itext7.font-asian"。 如果不安装 "itext7.font-asian" PDF 文件中有非Unicode编码的字符,将会抛出运行时异常:iText.IO.Excep…...
mac如何升级node版本、切换node版本
一、mac如何升级node版本 当前官网稳定版本是18.15.0 所以我从v14.17.4升级到v18.15.0 二、mac如何切换node版本 切换到16.20.0版本 三、这里是用node.js的多版本管理器n来升级和切换的,命令如下: 1、sudo npm cache clean -f //清除node.js的cache …...
一位大专学历的女程序员要求月薪25K,学历重要吗?来看看面试过程
“请提供一份完整的简历,以便我审查。从您的简历中,我感觉您写得还不错。方便的话,您可以自我简单介绍一下吗?“ ”好的,我叫李娟,拥有大专学位,目前正在寻找一份Java开发架构师的工作岗位。“…...
ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)
ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)播放前准备转换视频分辨率用FFmpeg将.MP4转换为.mjpeg格式FFmpeg的win10环境搭建FFmpeg的下载环境变量的搭建MP4转换成mjpeg格式总结播放前准备 1.28寸GC9A01屏幕的分辨率是240x24…...
epoll的LT模式(水平触发)和ET模式(边沿触发)
前言 epoll的触发模式是个引发讨论非常多的话题,网络上这方面总结的文章也很多,首先从名字上就不是很统一,LT模式常被称为水平触发、电平触发、条件触发,而ET模式常被称为边缘触发、边沿触发等,这些都是从英文翻译过来…...
Java基础面试20题
Java的八大基本数据类型 答:可以分4种类型:布尔类型(boolean),字符类型(char),浮点类型(double,float),整型(byte,short,int, long)。 String,StringBuffer与StringBuilder的区别? …...
Java面向对象封装
目录 封装的概念 封装具体实现步骤 示例代码如下 封装具体语法 封装的概念 Java封装是一种面向对象的编程方法,它的主要思想是将类的内部细节(包括数据和方法)隐藏起来,对外只提供公共的访问接口,从而保证了程序的安全性和稳定性。 封装具体实现步骤 1、声明类的成…...
队列实现图书信息管理(C语言)
文章目录Queue.hmain.cQueue.c用队列实现一个图书信息管理,这里放一下有哪些文件。(ps:我之前写的是学生信息管理,但是有人说我们的作业是写图书,就该了下内容,没有改文件名)队列是用链表实现的…...
Java开发 - 读写分离初体验
前言 上一篇中,我们介绍了主从复制,相信学过的小伙伴已经能够很好的掌握主从复制的技术,实际上也并没有那么难,虽然没有讲一主多从,多主多从的配置,但是从一主一从的配置中也很容易联想到该怎么配置&#…...
图文详解CAN Log文件 - ASC文件格式
目录 1 CAN Log文件 -- ASC文件格式 1.1 Header 1.2 版本编号 1.3 经典CAN网络中的描述 1.3.1 经典CAN Standard标准帧的描述 1.3.2 经典CAN Extended扩展帧的描述 1.3.3 CAN Remote远程帧的描述 1.3.4 CAN Error错误帧的描述 1.4 CANFD网络中的描述 1.4.1 经典CAN S…...
网络编程套接字(一)
学习任务: 我们先来认识端口号,区分好主机IP和端口号的区别,以及涉及到进程PID和端口号的区别。 然后简单认识一下TCP协议和UDP协议,这两个协议都是传输层的。接着了解什么是网络字节序,它有什么作用。然后是网络编程的…...
Mysql数据库存储过程
1、参数分类 存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下: 1、没有参数(无参数无返回) 2、仅仅带 IN 类型(有参数无返回) 3、仅仅带 OUT 类型(无参数有返回) 4、既带 IN 又带 O…...
《数据结构》| 第十章 排序算法实战指南
1. 排序算法入门:为什么我们需要这么多排序方法? 第一次接触排序算法时,很多人都会有这样的疑问:既然都能把数据排好序,为什么还要学这么多种算法?这就像装修时既有电钻又有锤子——每种工具都有最适合的使…...
从晶体管到CPU:CMOS反相器延迟如何决定你的电脑主频
从晶体管到CPU:CMOS反相器延迟如何决定你的电脑主频 当你按下电脑电源键的瞬间,数十亿个晶体管在芯片上开始协同工作。这些微观开关的切换速度,直接决定了处理器主频的上限。而构成所有数字电路基础的CMOS反相器,其动态响应特性就…...
RWKV7-1.5B-g1a参数详解:为何默认top_p=0.3更适合中文生成?语言分布实证
RWKV7-1.5B-g1a参数详解:为何默认top_p0.3更适合中文生成?语言分布实证 1. 模型概述 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型,特别适合中文场景下的基础问答、文案续写和简短总结任务。作为1.5B参数量的轻量级模型,…...
突破Windows苹果设备连接限制:Apple-Mobile-Drivers-Installer的自动化驱动解决方案
突破Windows苹果设备连接限制:Apple-Mobile-Drivers-Installer的自动化驱动解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址…...
【极限压测】从99.9%全红到5%安全线!2026最新横评5款硬核降AI工具
说真的,作为在知乎摸爬滚打好几年的博主,我太理解大家临近交稿时的那种绝望了。眼看着论文初稿要交,结果降ai检测一出来,竟然是红彤彤的99%?!那一刻,我感觉脑袋真的“嗡”的一声。好不容易熬夜码…...
嵌入式C语言变量初始化技术详解
## 1. 嵌入式C语言变量初始化技术详解### 1.1 初始化的重要性与基本原则在嵌入式系统开发中,变量初始化是防止未定义行为的关键步骤。由于嵌入式编译器特性的差异,未初始化的变量可能包含随机值,导致系统出现不可预测的行为。根据变量类型的不…...
OpenClaw备份策略:GLM-4.7-Flash模型与技能容灾方案
OpenClaw备份策略:GLM-4.7-Flash模型与技能容灾方案 1. 为什么需要备份OpenClaw环境 去年冬天的一个深夜,我的MacBook突然遭遇硬盘故障。当时OpenClaw正在执行一个长达3小时的自动化数据处理任务,所有中间状态和配置瞬间消失。这次事故让我…...
别再让时钟信号‘跑偏’了!手把手教你理解ADC中DCC电路的设计要点
高速ADC设计中的时钟占空比校正实战指南 时钟信号就像ADC系统的心跳,每一次跳动都决定着数据采样的精准度。当这个"心跳"变得不规律时,整个系统的性能就会大打折扣。在高速ADC设计中,时钟占空比失真是一个常见却又容易被忽视的问题…...
GIL已死,GIL万岁?——2024大厂Python并发岗面试题库首发(含性能压测对比数据)
第一章:GIL已死,GIL万岁?——2024大厂Python并发岗面试题库首发(含性能压测对比数据)一道高频真题:为什么 asyncio.run() 启动的协程无法被 multiprocessing.Process 并发执行? 该问题直指 Pyth…...
STM32从入门到实战:两周速成指南
STM32快速入门指南:从零基础到项目实战1. 项目概述1.1 STM32与8051的对比分析对于已经掌握8051和C语言的开发者而言,STM32的学习曲线并不陡峭。关键在于理解何时需要从8051迁移到STM32平台:计算能力需求:当8051的主频无法满足复杂…...
