當前位置:
首頁 > 知識 > 8 面向對象之抽象類+介面+內部類

8 面向對象之抽象類+介面+內部類

1 final關鍵字

用法:

1)使用final修飾變數,該變數就變成常量,在運行的過程中無法重新賦值。

2)使用final修飾方法,該方法無法在子類中重寫

3)使用final修飾的類,不能被繼承(派生其他子類)

JDK中常見的final修飾的類: java.lang.Math java.lang.String

2 抽象類和抽象方法

抽象方法:使用abstract修飾的方法。特徵: 沒有方法體。

抽象類:使用abstract修飾的類。

特點:

1)抽象類中可以包含抽象方法。包含抽象方法的類一定是抽象類,但抽象類中不一定包含抽象方法。

2)抽象類中可以存在屬性,方法,構造方法。

3)抽象類不能實例化(不能使用new關鍵字創建對象),但可以在子類調用構造方法。

作用: 通過抽象類,可以避免子類設計的隨意性。

抽象類就是為被繼承而生的。子類一旦繼承了抽象類,就必須重寫抽象類中的抽象方法,或者子類本身也是一個抽象類。

3 設計模式

1)單例模式

單例模式:保證一個類只能有一個實例。

特徵:構造方法私有化,提供一個靜態的方法獲取實例

常見的實現方法: ①餓漢式:使用時再創建對象。②懶漢式:載入時創建對象。

2)簡單工廠模式

簡單工廠模式又叫靜態工廠方法,可以通過其生成產品,可以降低因生成生成產品而導致的耦合性過強。(解耦合)

工廠模式的命名:xxxFactory--->生成xxx

如何實現工廠模式:

1.編寫父類和子類或介面和實現類

2.編寫靜態的工廠方法,返回值類型為父類或介面。--->多態

3.根據用戶的需求動態創建子類的實例,並返回。

4 介面

4.1介面定義和特點

定義: 使用interface關鍵字

[修飾符] interface 介面名 [extends 父介面1,父介面2...]{

//常量的聲明

//方法的聲明

}

介面成員的特點:

1)介面中所有的成員變數是常量,默認修飾符為public static final

2)介面中所有的方法都是抽象方法,默認修飾符為:public abstract

3)介面不能實例化,介面不能構造方法(抽象類不能實例化,但可以有構造方法)

4)java類是單繼承,但介面可以是多繼承

5)一個非抽象類實現實現介面,必須重寫介面中的抽象方法,抽象類實現介面可以重寫部分抽象方法。

6)一個類只能繼承一個父類,但可以實現多個介面

如果一個類繼承父類並實現了介面如何編寫?

[修飾符] class 類名 [extends 父類名 implements 介面名1,介面名2..]{

}

public class E extends D implements A,B{

}

4.2 Comparable介面

java.lang.Comparable介面:此介面強行對實現它的每個類的對象進行整體排序。

排序規則在compareTo方法中定義。當調用java.util.Arrays類中sort(Object[] objs)時,程序會調用compareTo方法對對象進行比較,

如果該方法返回正整數(1)時,代表當前對象大於待比較對象;如果返回0,代表當前對象等於待比較對象;如果該方法返回負整數(-1)時,代表當前對象小於待比較對象。

實現思路:

1)實現Comparable介面,並重新其compareTo方法

2)在compareTo方法中定義比較規則。返回值應該是正整數,零和負整數。

3)在調用Arrays.sort(Object[] objs)方法的過程中,sort方法的內部對調用compareTo方法進行比較。

4.3 Comparator介面

java.util.Comparator介面:比較器

int compare(Object o1, Object o2):比較用來排序的兩個參數。根據第一個參數小於、等於或大於第二個參數分別返回負整數、零或正整數。

java.util.Arrays類 sort(Object[] objs,Comparator c):按照指定的比較器對指定數組進行排序。

5 內部類

定義:將一個類定義置入另一個類定義中就叫作「內部類」

特點:

1)內部類可以訪問外部的成員,但外部類不能訪問內部的成員。

2)外部類的修飾符只有兩種:public和默認,而內部類的修飾符可以是public,protected,默認,private

3)內部類成員只有在內部類的範圍之內是有效的。

4)用內部類定義在外部類中不可訪問的屬性。這樣就在外部類中實現了比外部類的private還要小的訪問許可權。

成員內部類:將一個類作為另外一個類的成員。

靜態內部類:使用static修飾的內部類。靜態內部只能訪問外部的靜態成員。

方法內部類:在方法中定義的內部類。如果方法內部類中需要訪問方法中局部變數,該局部變數必須使用final修飾。

匿名內部類:沒有名稱的內部類,可以實現一個介面或繼承一個父類。適合創建那種只需要一次使用的類,不能重複使用。匿名內部類要使用外部類的局部變數,必須使用final修飾該局部變數。

6 java垃圾回收機制

Java語言不需要程序員直接控制內存回收,是由JRE在後台自動回收不再使用的內存,程序員無法精確控制,稱為垃圾回收機制(Garbage Collection)。

GC機制的優點:

1)提高編程效率,擯棄了C/C++中的指針,避免因遺忘釋放內存而導致的內存泄漏。

2)保證了程序的完整性。

3)降低性能開銷。

GC原理:JVM中有一個線程專門用於回收堆內存中不使用對象,常用的方法:

1)定時掃描堆中不使用的對象

2)通過計數控制回收時機。

垃圾回收機制只回收JVM堆內存里的對象空間,對其他物理連接,比如資料庫連接、輸入流輸出流、Socket連接無能為力。

垃圾回收發生具有不可預知性,程序無法精確控制垃圾回收機制執行。

可以將對象的引用變數設置為null,暗示垃圾回收機制可以回收該對象。

程序員可以通過System.gc或者Runtime.getRuntime.gc來通知系統進行垃圾回收,會有一些效果,但是系統是否進行垃圾回收依然不確定。

垃圾回收機制回收任何對象之前,總會先調用它的finalize方法(如果覆蓋該方法,讓一個新的引用變數重新引用該對象,則會重新激活對象)。

永遠不要主動調用某個對象的finalize方法,應該交給垃圾回收機制調用。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

Docker-compose實戰——Django+PostgreSQL
node.js入門系列(一)——Node.js簡介
HTTP權威指南-HTTP報文

TAG:科技優家 |

您可能感興趣

類名、抽象類名、介面作為形式參數
抽象與具象的遊走!版式設計的點線面
拍出抽象大片的5個訣竅!
穿越時空的照片之旅:帶你領略大腦內部的微觀之美,特別抽象
凍結在時空中的抽象
走進抽象藝術,領略抽象之美
抽象與符號之外:張隆的個體性創作
PS教程/抽象的顆粒貓
權志龍設計抽象禮盒賣出千元高價,裡面的手鏈竟是金屬的!
漢字造型設計!點線面的抽象化!
上海抽象畫會21位畫家吹響「抽象藝術結集號」
蒙德里安的抽象世界
在物與我之間的抽象
PS配合AI軟體製作抽象的線條圖形效果
抽象派大師畢加索為其3位「情人」所畫的3幅作品
手工布藝DIY教程-抽象風格衍縫餐墊
PS製作抽象特效的矢量背景圖設計
年輕人的卧室,以抽象概念著稱、詭異中透露著個性之美
荷蘭平面設計師Coen Pohl將荷蘭最具代表性的建築塔抽象成線條簡潔、幾何感強烈的平面圖像,你能認出其中幾幅呢? ????
01.27展覽預告︱「抽象+」 Abstract Plus 抽象繪畫在中國的新可能性