Scala面向對象2


1.?抽象屬性和方法:用?abstract?關鍵字定義抽象類,其中抽象屬性無初始值,抽象方法無實現 。重寫抽象方法需用?override?,重寫抽象屬性時,可變屬性用?var?,不可變屬性用?val??。

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

?
2.?單例對象:用?object?聲明,可包含屬性和方法,能直接調用,伴生對象與伴生類同名,可訪問類私有成員。


?
3.?apply方法:可實現不使用?new?創建對象,添加?private?可讓主構造器私有。

    1. 通過伴生對象的 apply 方法,實現不使用 new?方法創建對象。
    2. 如果想讓主構造器變成私有的,可以在()之前加上 private。
    3. apply 方法可以重載。
    4. Scala?中 obj(arg)的語句實際是在調用該對象的 apply?方法,即 obj.apply(arg)。用以統一面向對象編程和函數式編程的風格。
    5. 當使用 new?關鍵字構建對象時,調用的其實是類的構造方法,當直接使用類名構建對象時,調用的其實時伴生對象的 apply?方法。

4.?特質(trait):類似Java接口,可混合混入類中,解決類單繼承局限 。特質聲明用?trait?,使用時類通過?extends?和?with?關鍵字混入特質。

  1. ?基本語法:

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

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

?

    1. 特質可以同時擁有抽象方法和具體方法
    2. 一個類可以混入(mixin)多個特質
    3. 所有的 Java?接口都可以當做Scala 特質使用
    4. 動態混入:可靈活的擴展類的功能

?

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

?

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

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

特質自身類型:自身類型可實現依賴注入的功能

?
5.?類型檢查和轉換:?isInstanceOf?判斷對象是否為某類型,?asInstanceOf?進行類型轉換 。

枚舉類和應用類

枚舉類:需要繼承 Enumeration

應用類:需要繼承App

type 定義新類型

使用 type 關鍵字可以定義新的數據數據類型名稱,本質上就是類型的一個別名

?
6.?集合:介紹Scala集合體系,包括可變與不可變集合,以及?Map?、?List?等常用集合操作 。

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

特質。

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

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

    1. Scala?不可變集合,就是指該集合對象不可修改,每次修改就會返回一個新對象, 而不會對原對象進行修改。類似于 java?中的 String?對象
    2. 可變集合,就是這個集合可以直接對原對象進行修改,而不會返回新的對象。類似于 java?中 StringBuilder?對象

不可變集合繼承圖

可變集合繼承圖

?

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

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

相關文章

DiffAD:自動駕駛的統一擴散建模方法

25年3月來自新加坡公司 Carion 和北航的論文“DiffAD: A Unified Diffusion Modeling Approach for Autonomous Driving”。 端到端自動駕駛 (E2E-AD) 已迅速成為實現完全自動駕駛的一種有前途的方法。然而,現有的 E2E-AD 系統通常采用傳統的多任務框架&#xff0c…

Python四大核心數據結構深度解析:列表、元組、字典與集合

在Python編程語言中,數據結構是組織和存儲數據的基本方式。Python提供了四種內置的核心數據結構:列表(List)、元組(Tuple)、字典(Dictionary)和集合(Set)。這…

網絡編程—Socket套接字(TCP)

上篇文章: 網絡編程—Socket套接字(UDP)https://blog.csdn.net/sniper_fandc/article/details/146923670?fromshareblogdetail&sharetypeblogdetail&sharerId146923670&sharereferPC&sharesourcesniper_fandc&sharefro…

SkyWalking+Springboot實戰(最詳細)

本篇文章記錄了作者在0到1學習SkyWalking的過程,記錄了對SkyWalking的部署,學習,使用Bug解決等等過程 一、什么是SkyWalking 官方文檔: Apache SkyWalkinghttps://skywalking.apache.org/ SkyWalking 是一個開源的分布式追蹤、性…

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣 Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣功能概述硬件部分:軟件部分:代碼逐行解釋定義常量定義變量`setup()` 函數`loop()` 函數`readSensors()` 函數`refreshScr…

多線程編程中的鎖策略

目錄 1.悲觀鎖vs樂觀鎖 關鍵總結 悲觀鎖: 樂觀鎖: 選擇建議 用 悲觀鎖 當: 用 樂觀鎖 當: 2.重量級鎖vs輕量級鎖 選擇建議 用 輕量級鎖: 用 重量級鎖: 3.掛起等待鎖vs自旋鎖 關鍵細節說明 選擇…

負載均衡是什么,Kubernetes如何自動實現負載均衡

負載均衡是什么? 負載均衡(Load Balancing) 是一種網絡技術,用于將網絡流量(如 HTTP 請求、TCP 連接等)分發到多個服務器或服務實例上,以避免單個服務器過載,提高系統的可用性、可擴…

React-01React創建第一個項目(npm install -g create-react-app)

1. React特點 JSX是javaScript語法的擴展,React開發不一定使用JSX。單向響應的數據流,React實現單向數據流,減少重復代碼,比傳統數據綁定更簡單。等等 JSX是js的語法擴展,允許在js中編寫類似HTML的代碼 const …

小程序中的網絡請求

在小程序中,使用 wx.request( ) 這個方法來發送網路請求,整個請求的方式和 jQuery 里面的 $.ajax 方法是非常相似的。 在 wx.request( ) 這個方法中,接收一個配置對象,該配置對象中能夠配置的項目如下表: 關于服務器…

jvm 的attach 和agent機制

Java 的 Attach 和 Agent 機制在實際應用中得到了廣泛的成功應用,尤其是在監控、調試、性能分析、故障排查等方面。以下是這兩種機制在實際場景中的一些成功應用案例: 1. 性能監控與分析 Java Agent 和 Attach 機制廣泛應用于性能監控和分析&#xff0…

基于SpringBoot的“留守兒童網站”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“留守兒童網站”的設計與實現(源碼數據庫文檔PPT) 開發語言:Java 數據庫:MySQL 技術:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系統展示 系統整體功能圖 局部E-R圖 系統首頁界面 系統注冊…

iPhone XR:一代神機,止步于此

什么樣的 iPhone ,才配稱為一代神機? 我曾經用過iPhone 4S、iPhone 6S Plus、iPhone 8 Plus,iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷,不管囊中是否羞澀,主力機基本沒考…

【VUE】RuoYi-Vue3項目結構的分析

【VUE】RuoYi-Vue3項目結構的分析 1. 項目地址2. RuoYi-Vue3項目結構2.1 整體結構2.2 package.json2.2.1 🧾 基本信息2.2.2 🔧 腳本命令(scripts)2.2.3 🌍 倉庫信息2.2.4 📦 項目依賴(dependenc…

架構師面試(二十五):分布式存儲 Leader 設計

問題 在非常多的分布式存儲系統中,如:Zookeeper、Etcd、Kafka等,往往會存在一個 【Leader】 角色,并由該角色負責數據的寫入,這樣設計最主要的原因是什么呢? A. 唯一負責數據寫入的 Leader 角色可以避免并…

使用YoloV5和Mediapipe實現——上課玩手機檢測(附完整源碼)

目錄 效果展示 應用場景舉例 1. 課堂或考試監控(看到這個學生黨還會愛我嗎) 2. 駕駛安全監控(防止開車玩手機) 3. 企業辦公管理(防止工作時間玩手機) 4. 監獄、戒毒所、特殊場所安保 5. 家長監管&am…

GPT-4o從語義分割到深度圖生成,大模型狂潮下的計算機視覺:技術進步≠替代危機

隨著上周,GPT-4o原生多模態圖像生成功能的推出,更多玩法也被開發出來。一夜之間,GPT-4o原生多模態能力的釋放,讓圖像生成、語義分割、深度圖構建這些曾需要專業工具鏈支持的復雜任務,變成了普通人輸入一句話就能實現的…

Pytorch 張量操作

在深度學習中,數據的表示和處理是至關重要的。PyTorch 作為一個強大的深度學習框架,其核心數據結構是張量(Tensor)。張量是一個多維數組,類似于 NumPy 的數組,但具有更強大的功能,尤其是在 GPU …

小程序中跨頁面組件共享數據的實現方法與對比

小程序中跨頁面/組件共享數據的實現方法與對比 在小程序開發中,實現不同頁面或組件之間的數據共享是常見需求。以下是幾種主要實現方式的詳細總結與對比分析: 一、常用數據共享方法 全局變量(getApp())、本地緩存(w…

vue中的 拖拽

拖拽總結 實現方式特點適用場景HTML5 原生拖拽 API? 直接使用 dataTransfer 進行數據傳輸 ? 兼容性好(大部分瀏覽器支持) ? 適合簡單的拖拽場景低代碼平臺、表單生成器、組件拖拽Vue/React 組件庫(如 Vue Draggable、SortableJS&#xff…

MySQL 函數(入門版)

目錄 一、字符串函數 1、常用的字符串函數 2、函數演示 3、具體案例 二、數值函數 1、常用的數值函數 2、函數演示 3、具體案例 三、日期函數 1、常用的日期函數 2、函數演示 3、具體案例 四、流程函數 1、常用的流程函數 2、函數演示 3、具體案例 在MySQL中&a…