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…...
2025夏季技术实习「抢位战」:3步解锁2500+优质机会(附避坑指南)[特殊字符]
2025夏季技术实习「抢位战」:3步解锁2500优质机会(附避坑指南)🔥 【免费下载链接】Summer2026-Internships 2025年夏季技术实习机会集合! 项目地址: https://gitcode.com/GitHub_Trending/su/Summer2026-Internships…...
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程)
告别混乱!用CANoe的arxml数据库高效管理车载网络信号(附Signal/PDU/Frame创建全流程) 当车载网络从简单的CAN总线发展到包含FlexRay、以太网等多协议混合架构时,工程师们面临的信号管理复杂度呈指数级增长。一个典型的域控制器项目…...
3分钟掌握Chrome密码提取:ChromePass让你不再遗忘任何登录凭据
3分钟掌握Chrome密码提取:ChromePass让你不再遗忘任何登录凭据 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经在登录网站时,明明记得在Chrom…...
35:L构建数据泄露检测:蓝队的数据保护
作者: HOS(安全风信子) 日期: 2026-03-11 主要来源平台: GitHub 摘要: 当基拉开始针对数据进行攻击时,数据泄露成为蓝队防御的关键挑战。L构建了数据泄露检测系统,通过AI算法分析数据流动、访问模式和异常行…...
从数组到哈夫曼树:用Python代码图解软考数据结构核心算法
从数组到哈夫曼树:Python实战软考核心数据结构 1. 线性结构的Python实现 1.1 顺序栈与队列的实现 Python的列表(list)天然适合实现顺序存储结构。我们先来看栈的实现: class ArrayStack:def __init__(self, capacity10):self._items []self._capacity …...
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎 很多录屏、教程、演示和桌面工具,功能本身已经足够好,但一到“用户看你怎么操作”这一步,体验就会突然掉下来。 为什么? 因为点击不够明…...
vLLM-v0.17.1效果展示:vLLM在中文古诗生成任务中的韵律保持能力
vLLM-v0.17.1效果展示:vLLM在中文古诗生成任务中的韵律保持能力 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,以其出色的速度和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已经…...
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案
ChatGLM3-6B新手必看:断网可用的本地智能对话解决方案 1. 引言:为什么你需要一个本地AI助手? 想象一下,你正在处理一份敏感的客户合同,需要AI帮你分析条款;或者你在一个没有稳定网络的环境里,…...
VRCT:打破虚拟社交语言壁垒的实时翻译解决方案
VRCT:打破虚拟社交语言壁垒的实时翻译解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言差异常常成为跨文化交流的最…...
CentOS 7下OnlyOffice离线部署全攻略:从依赖包下载到一键配置(避坑指南)
CentOS 7下OnlyOffice离线部署全攻略:从依赖包下载到一键配置(避坑指南) 在企业内网或安全隔离环境中部署文档协作平台时,OnlyOffice凭借其开源特性和丰富的编辑功能成为首选方案。本文将深入探讨如何在CentOS 7系统中实现完全离线…...
