首頁 >Java >java教程 >java面對物件中知識點的總結

java面對物件中知識點的總結

不言
不言原創
2018-09-18 17:09:151693瀏覽

這篇文章帶給大家的內容是關於java面對對像中知識點的總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

前言

  1. java是面對物件的語言,因此有必要單獨紀錄下物件的各種定義和理解。

  2. 面對對象,主要包括:物件導向思想,類別與物件及其使用,物件的記憶體圖,成員變數和局部變數的區別,匿名對象,封裝(private) ,this關鍵字,建構方法,static關鍵字。

面對物件基本概述

1、概述:是基於過程導向的變成思想,是對過程導向的一種封裝。

2、面對對象開發:就是不斷的創建對象,使用對象,指揮對像做事情。

3、面對物件設計:其實就是在管理和維護物件之間的關係。

4、面對物件特徵:封裝,繼承,多型

5、類別與物件的關係:

(1)類別:一組相關的屬性與行為的集合
(2)物件:是該類別事物的具體體現

6、匿名物件:

(1)就是沒有名字的對象,是物件的一種簡化表示形式
(2)匿名物件的兩種使用情況:1、物件呼叫方法僅僅一次的時候2、作為實際參數傳遞

類別的相關概述:

1、 Student s = new Student();在記憶體中做了哪些事情?

(1)載入Student.class檔案進入記憶體
(2)在堆疊空間為s開啟空間
(3)在堆疊記憶體為學生物件開啟空間
(4)對學生物件的成員變數進行預設初始化
(5)對學生物件的成員變數進行顯示初始化
(6)透過建構方法對學生物件的成員變數賦值
(7)學生物件初始化完畢,把物件位址賦值給s變數

2、類別基本上包含:繼承、多型、抽象類別、介面、套件與導包、權限修飾符、內部類別

類別的繼承

1、概述:多個類別中存在相同屬性和行為時,將這些內容抽取到單獨一個類別中,那麼多個類別無需再定義這些屬性和行為,只要繼承這個類別即可。

2、透過extends這個關鍵字可以實現類別與類別到繼承

3、單獨的這個類別稱為父類別或基底類別、超類,這多個類別可以稱為子類別或衍生類別

4、有了繼承後,我們定義一個類別的時候,可以在一個已經存在的類別的基礎上,定義自己的新成員

#5、好處:

(1)提高了程式碼的複用性
(2)提高程式碼的維護性
(3)讓類別與類別之間產生了關係,是多態的前提
(4)類別的一個弊端就是,類別的耦合性很強

6、注意事項:

(1)子類別只能繼承父類別所有非私有成員(成員方法和成員變數)
(2)字類別不能繼承父類別的建構方法,但是可以透過super關鍵字存取父類別的建構方法
(3)不要為類別部分功能而去繼承

7、繼承中建構方法的關係:

(1)子類別中所有的建構方法都預設會父類別中空參數的建構方法
(2)因為子類別會繼承父類別的數據,可能還會使用父類別的數據。所以,在子類別初始化之前,一定要先完成父類別資料的初始化
(3)每一個建構方法的第一個語句預設是:super()
(4)如果父類別中沒有建構方法怎麼辦:
  【1】子類別透過super去顯示呼叫父類別其他的帶參的建構方法
  【2】子類別透過this呼叫本類別的其他建構方法
  【3】一定要請注意,super()後者this()必須出現在第一條語句中,否則,就會有父類別資料的多次初始化

#8、方法重寫:

( 1)概述:子類別中出現了一個和父類別一摸一樣的方法聲明,也被稱為方法覆蓋,方法複寫
(2)父類別中的私有方法不能被重寫
(3 )子類別重寫父類別方法時,存取權限不能更低
(4)父類別靜態方法,子類別也必須透過靜態方法進行重寫

幾個關鍵字:static、super 、final

1、static關鍵字:

(1)可以修飾成員變數與成員方法
(2)特點:
    【1】隨著類別的載入而載入
    【2】優先於物件存在
    【3】所有被類別的物件共用
    【4】可以透過類別名稱呼叫
(3)注意事項:
    【1】在靜態方法中是沒有this關鍵字的
    【2】靜態方法只能存取靜態的成員變數和靜態的成員方法
(4)靜態變數和成員變數的差異:
    【1】靜態變數屬於類,所以也成為類別變數;成員變數屬於對象,所以也稱為實例變數
    【2】靜態變數儲存在方法區的靜態區,成員變數儲存在堆疊記憶體中
    【3】靜態變數隨著類別的載入而載入,隨著類別的消失而消失;成員變數隨著物件的創建而存在,隨著物件的消失而消失
    【4】靜態變數可以透過類別名稱調用,也可以透過物件呼叫;成員變數只能透過物件名稱調用

2、super關鍵字:

(1)super和this關鍵字的用法很像,this代表本類別對應的引用,super代表父類別儲存空間的識別(可以理解為父類別的引用)
(2)使用super來引用父類別的成分,用this來引用當前物件

#3、final關鍵字:

(1)final關鍵字是最終的意思,可以修飾類別、成員變數、成員方法
(2)修飾類,類別不能被繼承
(3)修飾變量,變數就變成了常數,只能被賦值一次
(4 )修飾方法,方法不能被重寫

多態

1、概述:某一個事物,在不同時刻表現出來的不同狀態

2、多態的前提與體現:有繼承關係,有方法重寫,有父類別引用直接指向子類別物件

3、好處:

(1)提高程式的維護性(由繼承保證)
(2)提高程式的擴充性(由多型保證)

4、弊端:不能存取子類別特有功能

抽象類別

1、概述:一個沒有方法體的方法應該定義為抽象方法,而類別中如果有抽象方法,該類別必須定義為抽象類別

2、特點:

(1)抽象類和抽象方法必須是由abstract關鍵字修飾
(2)抽象類別不一定有抽象方法,有抽象方法的類別一定是抽象類別
(3)抽象類別不能實例化
(4)那麼,抽象類別如何實例化?依照多態的方法,由具體的子類別實例化
(5)抽象類別的子類,要麼是抽象類,要麼重寫抽象類別中的所有抽象方法

3、抽象類成員特徵:

(1)成員變數可以是變量,也可以是常數
(2)有建構方法,但不能實例化。那麼構造方法的作用是什麼呢?使用者子類別存取父類別資料的初始化
(3)可以有抽象方法,限定子類別必須完成某些動作
(4)也可以有非抽象方法,提高程式碼複用性
( 5)抽象方法必須為public或protected(因為如果是private,則不能被子類別繼承,子類別便無法實作此方法),預設情況下預設為public

介面

1.概述:英文成為interface,軟體工程中,介面泛指供別人呼叫的方法或函數,它是對行為的抽象

2、介面特點:

(1)使用關鍵字interface表示:interface 介面名稱{}
(2)類別實作介面用implements表示:class 類別名稱implements 介面名稱{}
(3)介面無法實作實例化,但是可以依照多態的方式,由具體的子類別實例化
(4)介面的子類別:要麼是抽象類,要麼重寫介面中的所有抽象方法

3、介面成員特點:

(1)成員變數:只能是常數,預設修飾符是public、static、final
(2)沒有建構方法,因為介面主要是擴充功能的,而沒有具體存在
(3)接口的成員方法只能是抽象方法,預設修飾符是public、abstract

類別與類別、類別與介面、介面與介面關係

1、類別與類別:繼承關係,只能單繼承,但是可以多層繼承

2、類別與介面:實作關係,可以單實現,也可以多實現。也可以在繼承一個類別多同時實作多個介面

3、介面與介面:繼承關係,可以單繼承,也可以多繼承

#抽象類別與介面的差別:

1、介面是對動作的抽象,抽象類別是對根源的抽象

2、抽象類別表示的是這個物件是什麼,而介面表示的是這個物件能做什麼

3、抽象類別與介面都不能被實例化,如果要實例化,抽象類別變數必須指向實作所有抽象方法的子類別對象,介面變數必須指向實作所有介面方法的類別物件

4、抽象類別要被子類別繼承,介面要被類別實作

5、介面只能做方法聲明,抽象類別中可以做方法聲明,也可做方法實作

# 6.介面中定義的變數只能是公共的靜態常數,抽象類別中的變數是普通變數

7、抽象類別裡邊的抽象方法必須被子類別所實現,如果子類別不能全部實作父類別抽象方法,那麼該子類別只能是抽象類別。同理,一個實作介面的時候,如果不能全部實作介面方法,那麼該類別也只能是抽象類別

8、抽象方法只能聲明,不能實作。接口是設計的結果,抽象類別是重構的結果

9、接口可以繼承接口,並可繼承多接口,但是類別只能單繼承

10、抽象類別可以有具體的方法和屬性,介面只能有抽象方法和不可變常數

11、當你專注於一個事物的本質的時候,用抽象類別;當你專注於一個操作的時候用介面。

套件:package

1、概述:其實就是資料夾,對類別進行分類管理

2、定義:package 套件名稱

3、注意事項:

(1)package語句必須是程式的第一個可執行的程式碼
(2)package語句在一個java檔案中只能有一個
(3)如果沒有package,預設表示無包名

4、帶包的類別的編譯和運行:

#(1)手動式:
  【1】javac編譯目前類別文件
【2】手動建立套件對應的資料夾
  【3】把編譯產生的class檔案放到上一個步驟建立的資料夾下
  【4】透過java指令執行,需要有套件的名稱執行:java testpackage.HelloWorld
(2)自動式:
  【1】javac編譯的時候帶-d參數執行:javac -d .HelloWorld.java
  【2】透過java指令執行,和手動式一樣

5、導包:

(1)概述:不同套件下的類別之間的訪問,我們發現,每次使用不同套件下的類別的時候,都需要加包的全路經,比較麻煩。這時,java提供了導包功能
(2)導包格式:import 包名.類名

#內部類別

1、概述:把類別定義在其他類別的內部,這個類別就被成為內部類別

2、存取特點:

(1)內部類別可以直接存取外部類別的成員,包括私有
(2)外部類別要想內部類別的成員,必須建立物件

3、內部類別位置:

(1)依照內部類別在類別中定義的位置不同,可以分為兩種格式:成員位置(成員內部類別),局部位置(局部內部類別)
(2)成員內部類別:
   【1】常見修飾符:private,static
   【2】被靜態修飾的成員內部類別只能存取外部類別的靜態成員
(3)局部內部類別:
   【1】可以直接存取外部類別的成員
   【2】可以建立內部類別對象,透過物件呼叫內部類別方法,來使用局部內部類別功能
   【3】局部內部類別存取局部變臉必須以final修飾。因為局部變數會隨著方法的調用完畢而消失,這時候,局部物件並沒有立刻從堆記憶體消失,還要使用那個變數。為了讓資料還能繼續被使用,就用final修飾,這樣,在堆記憶體裡面儲存的其實就是一個常數值。
(4)匿名內部類別:
   【1】是內部類別的簡化寫法
   【2】格式:new 類別名稱或介面名稱(){}
   【3】前提:存在一個類別或接口,這裡的類別可以是具體的普通的類,也可以是抽象類別
   【4】本質:是一個繼承了類別或實作了介面的子類別匿名物件
   【5】可以說,匿名內部類別其實就是一個子類別匿名物件

以上是java面對物件中知識點的總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn