本節課課堂總結

匿名子類:

說明

和?Java 一樣,可以通過包含帶有定義或重寫的代碼塊的方式創建一個匿名的子類。

單例對象(伴生對象)

Scala語言是完全面向對象的語言,所以并沒有靜態的操作(即在Scala中沒有靜態的概念)。但是為了能夠和Java語言交互(因為Java中有靜態概念),就產生了一種特殊的對象來模擬類對象,該對象為單例對象。若單例對象名與類名一致,則稱該單例對象這個類的伴生對象,這個類的所有“靜態”內容都可以放置在它的伴生對象中聲明。

單例對象語法:

基本語法:

object?Person{

?

val?country:String="China"

?

}

?

說明

(1)?單例對象采用object 關鍵字聲明

(2)?單例對象對應的類稱之為伴生類,伴生對象的名稱應該和伴生類名一致。

(3)?單例對象中的屬性和方法都可以通過伴生對象名(類名)直接調用訪問。

apply 方法:

說明:

(1)?通過伴生對象的 apply 方法,實現不使用 new 方法創建對象。

(2)?如果想讓主構造器變成私有的,可以在()之前加上 private。

(3)?apply 方法可以重載。

(4)?Scala 中 obj(arg)的語句實際是在調用該對象的 apply 方法,即?obj.apply(arg)。用以統一面向對象編程和函數式編程的風格。

(5)?當使用 new 關鍵字構建對象時,調用的其實是類的構造方法,當直接使用類名構建對象時,調用的其實時伴生對象的 apply 方法。

特質(Trait):

Scala 語言中,采用特質 trait(特征)來代替接口的概念,也就是說,多個類具有相同的特質(特征)時,就可以將這個特質(特征)獨立出來,采用關鍵字 trait 聲明。

Scala 中的 trait 中即可以有抽象屬性和方法,也可以有具體的屬性和方法,一個類可以混入(mixin)多個特質。這種感覺類似于 Java 中的抽象類。

Scala 引入 trait 特征,第一可以替代 Java 的接口,第二個也是對單繼承機制的一種補充。

特質基本語法:

一個類具有某種特質(特征),就意味著這個類滿足了這個特質(特征)的所有要素,?所以在使用時,也采用了extends 關鍵字,如果有多個特質或存在父類,那么需要采用with 關鍵字連接。

1)?基本語法:

沒有父類:class?類名 extends?特質 1?with?特質 2?with?特質 3 …

有父類:class?類名?extends?父類?with?特質 1?with?特質 2?with ?特質 3… 2)說明

(1)?類和特質的關系:使用繼承的關系。

(2)?當一個類去繼承特質時,第一個連接詞是 extends,后面是with。

(3)?如果一個類在同時繼承特質和父類時,應當把父類寫在 extends 后。

特質疊加:

由于一個類可以混入(mixin)多個 trait,且 trait 中可以有具體的屬性和方法,若混入的特質中具有相同的方法(方法名,參數列表,返回值均相同),必然會出現繼承沖突問題。沖突分為以下兩種:

第一種,一個類(Sub)混入的兩個 trait(TraitA,TraitB)中具有相同的具體方法,且兩個 trait 之間沒有任何關系,解決這類沖突問題,直接在類(Sub)中重寫沖突方法。

第二種,一個類(Sub)混入的兩個 trait(TraitA,TraitB)中具有相同的具體方法,且兩個 trait 繼承自相同的 trait(TraitC),及所謂的“鉆石問題”,解決這類沖突問題,Scala 采用了特質疊加的策略。

特質和抽象類的區別:

1.?優先使用特質。一個類擴展多個特質是很方便的,但卻只能擴展一個抽象類。

2.?如果你需要構造函數參數,使用抽象類。因為抽象類可以定義帶參數的構造函數,

而特質不行(有無參構造)。

類型檢查和轉換

說明:(1)?obj.isInstanceOf[T]:判斷 obj 是不是T 類型。

(2)?obj.asInstanceOf[T]:將 obj 強轉成 T 類型。

?

(3)?classOf?獲取對象的類名。

集?合:

集合簡介:

1)?Scala 的集合有三大類:序列 Seq、集Set、映射 Map,所有的集合都擴展自?Iterable

特質。

2)?對于幾乎所有的集合類,Scala 都同時提供了可變和不可變的版本,分別位于以下兩個包

不可變集合:scala.collection.immutable?可變集合:?scala.collection.mutable

3)?Scala 不可變集合,就是指該集合對象不可修改,每次修改就會返回一個新對象, 而不會對原對象進行修改。類似于 java 中的 String 對象

4)?可變集合,就是這個集合可以直接對原對象進行修改,而不會返回新的對象。類似于 java 中 StringBuilder 對象

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76981.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

I2C、SPI、UART、CAN 通信協議詳解

一、協議基本特性對比 特性ICSPIUARTCAN通信類型同步、半雙工同步、全雙工異步、全雙工異步、多主多從信號線SDA(數據)、SCL(時鐘)MOSI、MISO、SCK、SS(片選)TX(發送)、RX&#xff…

【diffusers 進階(十五)】dataset 工具,Parquet和Arrow 數據文件格式,load dataset 方法

系列文章目錄 【diffusers 極速入門(一)】pipeline 實際調用的是什么? call 方法!【diffusers 極速入門(二)】如何得到擴散去噪的中間結果?Pipeline callbacks 管道回調函數【diffusers極速入門&#xff0…

第十三章:持久化存儲_《鳳凰架構:構建可靠的大型分布式系統》

第十三章 持久化存儲 一、Kubernetes存儲設計核心概念 (1)存儲抽象模型 PersistentVolume (PV):集群級別的存儲資源抽象(如NFS卷/云存儲盤)PersistentVolumeClaim (PVC):用戶對存儲資源的聲明請求&#…

以太網安全

前言: 端口隔離可實現同一VLAN內端口之間的隔離。用戶只需要將端口加入到隔離組中,就可以實現隔離組內端口之間的二層數據的隔離端口安全是一種在交換機接入層實施的安全機制,旨在通過控制端口的MAC地址學習行為,確保僅授權設備能…

跨域問題前端解決

由于瀏覽器的同源策略,前后端分離的項目,調試的時候總是會遇到跨域的問題,這里通過修改前端代碼解決跨域問題。 首先先查看前端代碼的根目錄下,有沒有vue.config.js文件, 若有,使用方法1,若沒有此文件&…

Elasticsearch 報錯index_closed_exception

index_closed_exception 是 Elasticsearch 中的一個異常類型,它通常發生在嘗試對一個已經被關閉(closed)的索引執行搜索、寫入或其他操作時。在 Elasticsearch 中,索引是用來存儲和檢索數據的邏輯命名空間,可以將其類比…

LearnOpenGL-筆記-其九

今天讓我們完結高級OpenGL的部分: Instancing 很多時候,在場景中包含有大量實例的時候,光是調用GPU的繪制函數這個過程都會帶來非常大的開銷,因此我們需要想辦法在每一次調用GPU的繪制函數時盡可能多地繪制,這個過程就…

PDF預覽-搜索并高亮文本

在PDF.js中實現搜索高亮功能可以通過自定義一些代碼來實現。PDF.js 是一個通用的、基于Web的PDF閱讀器,它允許你在網頁上嵌入PDF文件,并提供基本的閱讀功能。要實現搜索并高亮顯示文本,你可以通過以下幾個步驟來完成: 1. 引入PDF…

二叉樹——隊列bfs專題

1.N叉樹的層序遍歷 我們之前遇到過二叉樹的層序遍歷,只需要用隊列先進先出的特性就可以達到層序遍歷的目的。 而這里不是二叉樹,也就是說讓節點的孩子入隊列時不僅僅是左右孩子了,而是它的所有孩子。而我們看這棵多叉樹的構造,它…

Python高級爬蟲之JS逆向+安卓逆向1.1節-搭建Python開發環境

目錄 引言: 1.1.1 為什么要安裝Python? 1.1.2 下載Python解釋器 1.1.3 安裝Python解釋器 1.1.4 測試是否安裝成功 1.1.5 跟大神學高級爬蟲安卓逆向 引言: 大神薯條老師的高級爬蟲安卓逆向教程: 這套爬蟲教程會系統講解爬蟲的初級&…

Windows 安裝和使用 ElasticSearch

SpringBoot3 整合 Elasticsearch 1. ElasticSearch 1.1 ES (1)ES 是一個開源的分布式搜索和分析引擎,專為處理大模型數據而設計,它能夠實現近乎實時的數據檢索、分析和可視化,廣泛用于全文搜索、日志分析和監控&…

matplotlib初探

庫引入 import matplotlib.pyplot as pltpyplot.figure 創建新圖形或激活現有圖形

NVM 多版本Node.js 管理全指南(Windows系統)

🧑 博主簡介:CSDN博客專家、全棧領域優質創作者、高級開發工程師、高級信息系統項目管理師、系統架構師,數學與應用數學專業,10年以上多種混合語言開發經驗,從事DICOM醫學影像開發領域多年,熟悉DICOM協議及…

實驗室預約|實驗室預約小程序|基于Java+vue微信小程序的實驗室預約管理系統設計與實現(源碼+數據庫+文檔)

實驗室預約小程序 目錄 基于微信小程序的實驗室預約管理系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、微信小程序前臺 2、管理員后臺 (1)管理員登錄 (2)實驗室管理 (3)公告信息管理…

SpringBoot底層-數據源自動配置類

SpringBoot默認使用Hikari連接池,當我們想要切換成Druid連接池,底層原理是怎樣呢 SpringBoot默認連接池——Hikari 在spring-boot-autoconfiguration包內有一個DataSourceConfiguraion配置類 abstract class DataSourceConfiguration {Configuration(p…

面試算法高頻03-遞歸

認識遞歸 遞歸的概念與特性:遞歸本質類似循環,是通過函數體進行的循環操作。借助電影《盜夢空間》類比,遞歸如同主角在不同夢境層穿梭,向下進入不同遞歸層,向上能回到原來一層,每一層環境和周圍元素相似&a…

linux Gitkraken 破解

ubuntu 安裝 Gitkraken 9.x Pro 版本_gitcracken.git-CSDN博客

設計模式簡述(十一)裝飾器模式

裝飾器模式 描述基本使用使用 描述 裝飾器模式是一種功能型模式 用于動態增強對象的功能 這么一說感覺上和代理模式有些類似 抽象裝飾器 要實現原有業務接口,并注入原有業務對象 至于對原有業務對象的調用,可以采用private業務對象 實現業務接口方法的…

【NetCore】ControllerBase:ASP.NET Core 中的基石類

ControllerBase:ASP.NET Core 中的基石類 一、什么是 ControllerBase?二、ControllerBase 的主要功能三、ControllerBase 的常用屬性四、ControllerBase 的常用方法2. 模型綁定與驗證3. 依賴注入五、ControllerBase 與 Controller 的區別六、實際開發中的最佳實踐七、總結在 …

DE2-115分秒計數器

一、模塊設計 如若不清楚怎么模塊化,請看https://blog.csdn.net/szyugly/article/details/146379170?spm1001.2014.3001.5501 1.1頂層模塊 module top_counter(input wire CLOCK_50, // 50MHz時鐘input wire KEY0, // 暫停/繼續按鍵out…