009_抽象類和接口

抽象類和接口

  • final關鍵字
    • 常量
  • 單例模式(設計模式)
  • 枚舉類
  • 抽象類
    • 抽象類的注意事項、特點
    • 使用抽象類的好處
    • 模版方法設計模式
  • 接口
    • 接口的好處
    • 接口的注意事項

final關鍵字

  • final關鍵字是最終的意思,可以修飾類、方法、變量。
    • 修飾類:該類被稱為最終類、特點不能再被繼承了。
    • 修飾方法:該方法被稱為最終方法,特點是不能被重寫。
    • 修飾變量:該變量有且僅能被賦值一次。
  • final修飾基本類型的變量,變量存儲的數據不能被改變。
  • final修飾引用類型的變量,變量存儲的地址不能被改變,但地址所指向對象的內容是可以被改變的。

常量

  • 使用了static final 修飾的成員變量稱為常量。
  • 作用:常用于記錄系統的配置信息、
  • 常量命名規范:建議使用大小寫英文單詞,多個單詞使用下劃線連接起來。
  • 常量記錄系統配置信息的優勢、執行原理
    • 代碼可讀性更好,可維護性也更好。
    • 程序編譯后,常量會被"宏替換":出現常量的地方全部會被替換成其記住的字面量,可以保證使用常量和直接用字面量的性能是一樣的。

單例模式(設計模式)

  • 設計模式:一個問題通常由n種解法,其中肯定有一種解法是最優解。
  • 設置模式有20多種,對應20多種軟件開發中會遇到的問題。
    -單例設計模式
    • 作用:確保某各類中只能創建一個對象。
    • 寫法,實現步驟:
      • 把類的構造器私有。
      • 定義一個靜態變量記住類的一個對象。
      • 定義一個靜態方法,返回對象。
 // 單例類
public class A {// 2、定義一個靜態變量記住類的一個對象private static A a = new A();// 1、私有構造器private A(){}// 3、定義一個靜態方法返回對象public static A getObject(){return a;}
}
  • 單例類有很多形式
    • 如“餓漢式單例”:拿對象時,對象早就創建好了。
public class A {// 2、定義一個靜態變量記住類的一個對象private static A a = new A();// 1、私有構造器private A(){}// 3、定義一個靜態方法返回對象public static A getObject(){return a;}
}
  • 如“懶漢式單例”:拿對象時,才開始創建對象。
    • 特點:延遲加載對象
    • 寫法:
      • 把類的構造器私有。
      • 定義一個靜態變量由于存儲對象。
      • 提供一個靜態方法,保證返回的是同一個對象。
public class B {// 2、定義一個類變量量用于存儲對象private static B b ; // null// 1、單例必須私有構造器private B(){}// 3、提供一個類方法返回類的一個對象public static B getObject(){if(b == null){b = new B();}return b;}
}

枚舉類

  • 枚舉類是一種特殊類。
  • 寫法
修飾符 enum 枚舉類名{名稱1 ,  名稱2, ... ; 其他成員…
}
  • 特點:
    • 枚舉類中的第一行,只能寫枚舉類的對象名稱,其要用逗號隔開。
    • 這些名稱,本質是常量,每個常量都記住了枚舉類的一個對象。
public enum A{
X , Y , Z;
}Compiled from "A.java"
public final class A extends java.lang.Enum<A> {public static final A X = new A();public static final A Y = new A();public static final A Z = new A();public static A[] values();public static A valueOf(java.lang.String);
}
  • 枚舉類都是最終類,不可以被繼承、枚舉類都是繼承java.lang.Enun類的。
  • 枚舉類的構造器都是私有的(寫不寫都只能是私有的),因此,枚舉類對外不能創建對象。
  • 枚舉類很適合做信息分類和標志。

抽象類

  • java中有一個關鍵字叫:abstract,它就是抽象的意思,可以用它修飾類、成員方法。
  • abstract修飾類,這個類就是抽象類
  • abstract修飾方法,這個方法就是抽象方法。
修飾符 abstract class 類名{ 修飾符 abstract 返回值類型 方法名稱(形參列表)}public abstract class A {// 抽象方法:必須abstract修飾,只有方法簽名,不能有方法體public abstract void test();}

抽象類的注意事項、特點

  • 抽象類中不一定要有抽象方法,有抽象方法的類必須是抽象類。
  • 類有的成員:成員變量、方法、構造器,抽象類都可以有。
  • 抽象類最主要的特點:抽象類不能創建對象,僅作為一種特殊的父類,讓子類繼承并實現。
  • 一個類的繼承抽象類,必須重寫完抽象類的全部抽象方法,否則這個類也必須定義成抽象類。

使用抽象類的好處

  • 父類知道每個子類都要做某個行為,但每個子類要做的情況不一樣,父類就定義成抽象方法,交給子類去重寫實現,我們設計這樣的抽象類,就是為了更好的支持多態。

模版方法設計模式

  • 提供一個方法作為完成某類功能的模版、模版方法封裝了每個實現步驟,但允許子類提供特定步驟的實現。
  • 模版方法設計模式可以:提高代碼的復用、并簡化子類設計。
  • 寫法
    • 定義一個抽象類。
    • 在里面定義2個方法
      • 一個是模版方法:把共同的實現步驟放里面去。
      • 一個是抽象方法:不確定的實現步驟,交給具體的子類來完成。
  • 建議使用 final 關鍵字修飾模版方法
    • 模范方法是給子類直接使用的,不能被子類重寫。
    • 一旦子類重寫了模版方法,模版方法就失效了。

接口

  • java提供了interface關鍵字定義接口。
public interface 接口名 {// 成員變量(常量)// 成員方法(抽象方法)
} 
  • 接口不能創建對象,
  • 接口是用來被類實現(implements)的,實現接口的類稱為實現類,一個類可以實現多個接口。
修飾符 class 實現類類名 implements 接口1, 接口2, 接口3 , ... {//實現類實現多個接口,必須重寫完全部接口的全部抽象方法,否則實現類需要定義成抽象類。
} 

接口的好處

  • 彌補了類單繼承的不足,一個類同時可以實現多個接口,使類的角色更多,功能強大。
  • 讓程序可以面相接口編程,這樣程序員就可以靈活方便的切換各種業務實現(更利于程序的解耦合)。
  • JDK 8開始,接口新增了三種形式的方法
  • 增強了接口的能力,更便于項目的擴展和維護。
public interface A{/*** 1、默認方法(實例方法):使用用default修飾,默認會被加上public修飾。* 注意:只能使用接口的實現類對象調用*/default void test1(){...}/*** 2、私有方法:必須用private修飾(JDK 9開始才支持)*/private void test2(){...}/*** 3、類方法(靜態方法):使用static修飾,默認會被加上public修飾。* 注意:只能用接口名來調用。*/static void test3(){...}}

接口的注意事項

  • 接口與接口可以多繼承:一個接口可以同時繼承多個接口[重點]。
  • 一個接口繼承多個接口,如果多個接口中存在方法簽名沖突,則此時不支持多繼承,也不支持多實現。
  • 一個類繼承了父類,又同時實現了接口,如果父類中和接口中有同名的默認方法,實現類會優先用父類的。
  • 一個類實現了多個接口,如果多個接口中存在同名的默認方法,可以不沖突,這個類重寫該方法即可。

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

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

相關文章

新潮透明液體水珠水滴失真故障扭曲折射特效海報字體標題設計ps樣機動作素材 Bubble Photoshop Templates

只需單擊幾下即可創建引人注目的視覺效果&#xff01;您需要做的就是將您的文本或圖像放入智能對象中并應用作。 包中包含&#xff1a; 15 個靜態 Photoshop 模板&#xff08;PS 2019 及更高版本&#xff09; 01-05 垂直布局 &#xff08;22504000&#xff09;06-10 水平布局…

Android DiaLog全屏設置,帶有叉號的彈窗,這個彈窗分為兩個部分,一個是主體,另一個是關閉部分。自定義布局彈窗

1.先上圖。要實現的效果圖。 2.這是我自己實現的效果圖&#xff0c;是不是跟效果圖一摸一樣 來看看整體效果 3.我把自己實現的效果圖的代碼寫出來。如下就是我的代碼 3.1首先是MainActivity類 import androidx.appcompat.app.AppCompatActivity;import android.app.Alert…

NVR接入錄像回放平臺用EasyCVR打造地下車庫安防:大型商居安全優選方案

一、背景分析 隨著居民生活品質的提升&#xff0c;大型商業建筑和住宅小區紛紛配套建設地下停車庫。但是地下車庫盜竊、失火、惡意毀壞車輛、外部人員隨意進出等事件頻發&#xff0c;部署視頻監控系統成為保障地下車庫的安全關鍵舉措。 目前&#xff0c;很多商業和住宅都會在…

階段測試 【過程wp】

分享總結: 回顧起來,真的感慨很多呀。看著并不難啊,但難的是解題思維:如何判斷該頁面的關鍵點,快速地確定問題的核心,找到對應的解決方法。達到便捷、高效的得到結果。我們做了整整近七個半小時。在這個過程中,我發現自己的思維鈍化,不太能自主高效地劃分判斷漏洞類型,…

【C++】<STL部分>:STL標準模板庫概要

STL(standard template libaray-標準模板庫)&#xff0c;是C標準庫的重要組成部分&#xff0c;包含了很多常用的數據結構和算法。 在我們學習了模板的之后&#xff0c;再來看STL&#xff0c;就能知道它是C標準庫中的模板類和模板函數的集合&#xff0c;作為可復用的庫大大提高…

從傳遞函數到PID控制器

在過程控制中&#xff0c;按偏差的比例&#xff08;P&#xff0c;Proportional&#xff09;、積分&#xff08;I&#xff0c;Integral&#xff09;和微分&#xff08;D&#xff0c;Differential&#xff09;進行控制的PID控制器&#xff08;亦稱PID調節器&#xff09;是應用最為…

【PVR Review】《A Review of Palmar Vein Recognition》

[1]張秀峰,牛選兵,王偉,等.掌靜脈識別研究綜述[J].大連民族大學學報,2020,22(01):33-37.DOI:10.13744/j.cnki.cn21-1431/g4.2020.01.007. 文章目錄 1、背景2、手掌靜脈識別方法2.1、傳統手掌靜脈圖像識別方法2.2、基于深度學習的掌靜脈圖像識別 3、手掌靜脈識別難點 1、背景 目…

vector復制耗時

CPP中的vector對象在傳參給子函數時&#xff0c;如果直接傳參&#xff0c;會造成復制給形參的額外耗時 如何解決這個問題呢&#xff1f; 這樣定義局部函數 const vector <int>&vec可以保證傳遞vector對象時使用地址傳遞&#xff0c;并且使用const保證vector不被改變…

算法思想之雙指針

文章目錄 雙指針字符串序列判定字符串所有整數最小和服務交換接口失敗率分析分披薩最多團隊 雙指針 雙指針是指在解決問題時使用兩個指針&#xff0c;通常分別指向數組或字符串中的不同位置&#xff0c;通過移動這兩個指針來解決問題的一種技巧。雙指針技巧常用于解決數組、鏈…

學透Spring Boot — 018. 優雅支持多種響應格式

這是我的專欄《學透Spring Boot》的第18篇文章&#xff0c;想要更系統的學習Spring Boot&#xff0c;請訪問我的專欄&#xff1a;學透 Spring Boot_postnull咖啡的博客-CSDN博客。 目錄 返回不同格式的響應 Spring Boot的內容協商 控制器不用任何修改 啟動內容協商配置 訪…

ngx_os_init

定義在 src\os\unix\ngx_posix_init.c ngx_int_t ngx_os_init(ngx_log_t *log) {ngx_time_t *tp;ngx_uint_t n; #if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)long size; #endif#if (NGX_HAVE_OS_SPECIFIC_INIT)if (ngx_os_specific_init(log) ! NGX_OK) {return NGX_ERR…

深信服護網藍初面試題

《網安面試指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇網安資料庫https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

游戲引擎學習第206天

回顧并為當天的工作定下目標 接著回顧了前一天的進展。之前我們做了一些調試功能&#xff0c;并且已經完成了一些基礎的工作&#xff0c;但是還有一些功能需要繼續完善。其中一個目標是能夠展示實體數據&#xff0c;以便在開發游戲邏輯系統時&#xff0c;可以清晰地查看和檢查…

HTML 表單:構建交互式網頁的關鍵元素

HTML 表單:構建交互式網頁的關鍵元素 引言 HTML表單是構建交互式網頁的核心組件之一,它允許用戶與網站進行交互,提交信息、填寫問卷或進行其他操作。本文將深入探討HTML表單的基礎知識、常用元素、表單驗證以及如何優化表單設計,以提高用戶體驗和網站的可訪問性。 HTML表…

Qt音頻采集:QAudioInput詳解與示例

1. 簡介 QAudioInput是Qt Multimedia模塊中用于音頻采集的核心類&#xff0c;能夠從麥克風等輸入設備實時獲取原始音頻數據&#xff08;PCM格式&#xff09;。本文將通過原理講解和代碼示例&#xff0c;幫助開發者快速掌握音頻采集的核心技術。 2. 核心功能 支持多種音頻格式&…

下載安裝Node.js及其他環境

提示&#xff1a;從Node版本降級到Vue項目運行 文章目錄 下載Node.js環境配置配置環境變量 安裝 cnpm&#xff08;我需要安裝&#xff09;安裝腳手架安裝依賴安裝淘寶鏡像&#xff08;注意會更新&#xff09;cnpm vs npm 與新舊版本核心差異包管理器不同功能差異如何選擇&#…

【后端】ORM / ODM

長期不定期更新&#xff0c;建議關注收藏點贊。 概述 ORM&#xff08;Object-Relational Mapping&#xff0c;對象關系映射&#xff09;&#xff1a;面向關系型數據庫&#xff0c;ORM將對象映射到數據庫的表和行&#xff08;例如MySQL、PostgreSQL&#xff09;。ODM&#xff0…

無限滾動(Infinite Scroll)頁面谷歌不收錄!必須改回分頁嗎?

近三年&#xff0c;全球超過58%的網站采用無限滾動設計&#xff08;數據來源&#xff1a;PageTraffic 2023&#xff09; 谷歌官方數據顯示&#xff0c;動態加載內容的索引失敗率高達73%&#xff08;Google Webmaster Report 2022&#xff09;&#xff0c;而采用純無限滾動的頁…

手寫JSX實現虛擬DOM

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

網絡性能優化參數關系解讀 | TCP Nagle / TCP_NODELAY / TCP_QUICKACK / TCP_CORK

注&#xff1a;本文為 “網路性能優化” 相關文章合輯。 未整理去重。 如有內容異常&#xff0c;請看原文。 TCP_NODELAY 詳解 lenky0401 發表于 2012-08-25 16:40 在網絡擁塞控制領域&#xff0c;Nagle 算法&#xff08;Nagle algorithm&#xff09;是一個非常著名的算法&…