主頁 > 軟體設計 > Java面向物件基礎總結

Java面向物件基礎總結

2020-12-03 07:34:47 軟體設計

面向物件基本思想

1、OO概述

1.1、面向程序和面向物件的比較

* 對于一個問題的解決,面向程序,需要考慮其每一步的實作,不適合處理復雜的問題;
* 面向物件思想是一種分類的思維模式,即思考一個問題需要哪些分類,然后對分類進行單獨的思考,最后才會對某個分類下的細節進行面向程序的思索;
*  面向物件更適合處理復雜的問題,適合處理需要多人協作的問題;
* 對于描述復雜的事物,需要用面向物件的思想去宏觀上分析整個系統,但在具體的微觀操作的設計上,依舊需要使用面向程序思想去處理;

1.2、面向物件編程

以類的方式組織代碼,以物件的方式封裝資料;

1.3、面向物件的三大特征

* 封裝:對資料進行封裝,然后,對外提供一個操作資料的介面,使外界只能通過這些特定介面去訪問資料,賦予了物件“黑盒”的特性
* 繼承:是一個物件獲取另一個物件屬性的程序
* 多型:一個程式中相同名字的方法表示不同含義的情況,方法的多載是靜態多型,方法的覆寫是動態多型

1.4、類和物件的理解

*  抽象:從眾多的事物中抽取出共同的特征
*  物件是具體的事物,類是對物件的抽象
* 物件是現實世界中明確標識的物體,每個物件都有自己獨特的狀態行為和標識
* 物件的狀態: 也稱為物件的特征和屬性,是由當前資料域的值決定的
* 物件的行為:也稱為動作,是由物件中的方法決定的
* 物件標識:類是物件的模板,物件是類的實體,可以以一個類為模板創建多個物件(實體化),物件的標識用來區分這些物件
* 當一個物件使用完畢,不在被參考時,就會被垃圾回收器(gc)回收

1.5、OOP的優勢

* 易維護
* 可重用
* 可擴展

1.6、面向物件(OO)的三大領域

* 面向物件分析(OOA)
* 面向物件設計(OOD)
* 面向物件編程(OOP)

2、變數的作用域和生存期

1.1、變數作用域

* 變數的作用域變數可以在程式的什么范圍內可以使用
* Java程式中作用域是通過塊來實作的(Java中的大括號)
* 變數在哪個塊中被宣告,它的作用域就在哪一個塊

2.2、變數的生存期:

* 變數的生存期是物件被分配記憶體記憶體的時間期限
* 對于區域變數(基本型別),在宣告時系統為該變數分配記憶體,當方法回傳時,該變數從記憶體堆疊中清除
* 對于物件:在new創建物件時,系統將在堆中為它分配記憶體,當它不在被參考時,在之后的某一時刻,垃圾回收器運行時才能被回收

3、包機制

* 包是對類的封裝,以一組相關類或者介面的集合
* 不同的包中可以有同名的類
* 通過包可以實作對類的訪問控制
* Java中**package**關鍵字標識當前編譯單元所屬的包
* Java中用**import**關鍵字引入包
* 在Java5中允許使用import static 來匯入類的常量和靜態方法,這樣在使用時就不需要加類名前綴了

4、Java編譯單元(源檔案)

* java編譯單元可以包含一個package陳述句,多個import陳述句以及類、介面和列舉定義
* 一個編譯單元只能有一個public類,并且該類名必須和源檔案的主檔案名必須和該類類名相同

5、類的繼承和多型

5.1、類的繼承和方法覆寫

* 繼承是對父類的擴展,子類通過繼承獲得父類屬性和方法
* Java中只有單繼承,A extends b 將a宣告為b的直接子類
* 子類可以在類體中重寫(覆寫)繼承自父類的方法,用@Override注解來避免寫錯方法頭
* 子類覆寫父類方法被訪問的權限不能比父類高
* 類的被訪問權限高到低 private>預設>protected>public
* private方法不能覆寫!,如果在子類中定義了一個方法在父類中是private修飾的,那么這兩個方法無關
* 父類中的static方法可以被繼承,但不能被覆寫,如果子類中定義了相同的static方法,那么該父類方法會被隱藏,但使用父類.方法名仍然可以使用
* 方法的多載和方法的覆寫的區別
	*方法多載是在同一個類中定義多個名稱相同而引數不同的方法,而方法的覆寫是在子類中對繼承自父類的方法提供一種不同的實作,方法頭、引數、回傳值都是和父類相同的
* super關鍵字用來參考當前物件的父類物件
    * 在子類中呼叫父類的構造方法super(引數串列);
    * 在子類中訪問父類中被隱藏的物件super.variableName;
    * 在子類中訪問父類中被覆寫的方法super.methodName(引數串列)
    * 不能用super呼叫間接父類的構造方法,super.super();是不合法的
    * 可以在構造方法中用this呼叫本類的其他構造方法this.構造方法(引數串列);
    * 在構造方法中使用this呼叫本類的其他構造方法和super呼叫父類構造方法都只能是方法的第一條陳述句且只能有一條陳述句,所以二者不能在一個構造方法中
    * 創建子類物件時候,系統首先呼叫所有父類的構造方法,包括所有類的根類Object

5.2、封裝性和訪問修飾符

* 類(包括介面、列舉)的訪問權限`
    * public:可以被任何其他類使用
    * 預設訪問修飾符(不寫):只能被同一包內的類使用

* 類的成員變數訪問權限(在類中創建該類實體.訪問)
    * private     只能被類本身訪問,外界只能通過該類提供的介面訪問
    * 預設         同一包內的類可以訪問
    * protected   可以被統一包內的類和其子類訪問
    * public      可以被任何類訪問
  
* final修飾符的作用
    * final修飾類,該類就會成為最終類,不能被繼承
    * final修飾方法,該方法就不能被子類覆寫
    * final修飾變數,該變數變為常量,一經賦值不能更改
    * final修飾引數,則該引數在方法中只能使用但不能被改變
    * final修飾一個參考變數,表示該變數的參考(地址)不能改變,即不能使用該變數指向另一個物件,但物件本身可以改變
  	* 成員變數一般和static修飾符連用,構成編譯時常量,編譯器將該常量值代入任何可能使用到它的運算式中,以減輕運行時的負擔

5.3、抽象類

* 抽象類是用關鍵字abstract修飾的類,其中可以定義抽象方法,抽象方法也使用abstract修飾,只有宣告沒有具體的實作
* 抽象類不能實體化,但可以被宣告;抽象類的子類需要實作抽象類中的所有方法,除非子類本身也是抽象類,
* 抽象類中可以定義非抽象方法,甚至可以沒有抽象方法,但即使沒有抽象方法,它還是要被一個非抽象子類繼承才可以使用
* abstract 類必須被繼承才有意義,而final修飾的類不能被繼承,所以這兩個關鍵字不能再定義類的時候同時使用
* abstract類中有構造方法
* 物件的轉換和多型
	* 繼承關系使子類繼承了父類的特性,并且可以擴展一些新的特性,子類是父類的特殊化,子類和父類的關系是(is a)關系,子類 is a 父類
    * 子類物件和父類物件在一定條件下也可以互相轉換
        * 子類可以自由轉換成父類物件但要損失子類本身擴展的特性
        * 父類物件轉換子類物件需要強制型別轉換,但在轉換之前要使用instanceof運算子判斷它指向的是不是要轉換的子型別別的物件,否則容易出現類轉換異ClassCastException
        * instanceof運算子 物件 instanceof 類名 判斷這個物件是不是該類的實體

5.4、多型

* 多型就是多種形式,指Java程式中一個類或多個類中可以定義多個同名的方法,這多個同名的方法可以完成不同的操作
* 多型性是指在程式運行時判斷應該執行哪個方法代碼的能力
* 多型分為靜態多型(編譯時多型)和動態多型(運行時多型),前者通過方法多載實作,后者通過方法覆寫實作
* 系結:方法呼叫和方法體的關聯程序
	* 前期系結:程式執行前系結
    * 后期系結:程式執行時系結
	* Java中除了用static和final修飾的方法外,其余都是后期系結(動態系結)
* 動態多型實作機制:方法的動態系結
	* 對于多載的方法,在運行時根據傳遞的引數來系結方法體
    * 在父類中宣告的方法被子類繼承,如果該方法被子類覆寫,在子類呼叫該方法時會系結子類覆寫的方法體;
    * 如果子類沒有覆寫該方法,則通過子類呼叫該方法時系結父類原有方法體
    * 如果一個方法中的引數是父類,那么該方法的引數可以傳遞該父類的任意子類物件

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/228904.html

標籤:面向對象

上一篇:渣本僥幸獲得內推阿里,技術四面,斬獲offer,定級P6!

下一篇:面向物件基本概念2-核心

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more