成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

夯實(shí)Java:從面向?qū)ο笳f起

hearaway / 894人閱讀

摘要:面向?qū)ο笈c面向過程的區(qū)別要知道,二者并不是非此即彼,而是相輔相成的。而面向過程,則在微觀上對對象內(nèi)部進(jìn)行具體的實(shí)現(xiàn)。面向?qū)ο蟮娜筇匦哉f到面向?qū)ο?,就不得不說其三大特性封裝繼承和多態(tài)。封裝封裝是面向?qū)ο笞罨A(chǔ)的特性。

作者:伯特
出處:github.com/ruicbAndroid/LoulanPlan
聲明:本文出自伯特的《LoulanPlan》,轉(zhuǎn)載務(wù)必注明作者及出處。

剛學(xué)習(xí) Java 那會就接觸了“面向?qū)ο蟆钡母拍?,但?dāng)時(shí)并沒有太多實(shí)戰(zhàn)經(jīng)驗(yàn),所以對其的理解也僅限于概念。當(dāng)工作兩年后再回顧一下,有些概念能夠落地了,遂記錄一下,作為 LoulanPlan 的開篇。

1. 什么是面向?qū)ο?/b>

面向?qū)ο笫且环N程序設(shè)計(jì)的思想,而不是一種方法,亦或準(zhǔn)則。其指導(dǎo)我們從現(xiàn)實(shí)世界中客觀存在的事物出發(fā),進(jìn)行程序設(shè)計(jì)。

2. 什么是對象

Everything is Object,在 Java 語言的世界中,萬事萬物皆對象。上面提到“從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)”,這里客觀存在的事物,我們稱之為“對象”。

在程序中,對象是程序的基本構(gòu)成單元,是客觀存在的事物的體現(xiàn)。一個(gè)對象通常由一組屬性和對這組屬性進(jìn)行操作的若干服務(wù)(方法)構(gòu)成。

3. 面向?qū)ο笈c面向過程的出現(xiàn)

面對簡單的軟件程序,我們往往不需要考慮過多的設(shè)計(jì),任何一個(gè)小的功能單元或模塊,都可以按照一定的步驟去實(shí)現(xiàn),這種 step by step 的方式即為面向過程。

隨著程序的復(fù)雜性提升,我們無法按步驟去描述并實(shí)現(xiàn)編碼,所以面向過程已無法適應(yīng)。加之考慮到代碼的可讀及復(fù)用性等,便有了對象的概念,以及面向?qū)ο蟮木幊趟枷搿?/p>

當(dāng)然,還有面向組件、面向服務(wù)等設(shè)計(jì)思想,不在此討論。

4. 面向?qū)ο笈c面向過程的區(qū)別

要知道,二者并不是非此即彼,而是相輔相成的。

面向?qū)ο笏枷胍笪覀儚暮暧^上進(jìn)行程序設(shè)計(jì),抽象出一個(gè)個(gè)“對象”。而面向過程,則在微觀上對“對象”內(nèi)部進(jìn)行具體的實(shí)現(xiàn)。

可以看出,面向?qū)ο笞罱K還是離不開面向過程。

舉例來說,需要編程實(shí)現(xiàn)繪制圓形、三角形、矩形。

面向過程實(shí)現(xiàn):

drawCircle... //一坨繪制相關(guān)的代碼,下同
drawTriangle
drawRect

面向?qū)ο髮?shí)現(xiàn):

//抽象出畫筆對象
class Painter {
    drawCircle(){
        //上述面向過程實(shí)現(xiàn),下同
    }

    drawTriangle(){}

    drawRect(){}
}

//面向?qū)ο?,使用畫筆繪制
1. painter.drawCircle() //此處只需要調(diào)用對象的方法,下同
1. painter.drawTriangle()
2. painter.drawRect()
5. 對象與類

前面介紹了對象以及面向?qū)ο螅旅婊氐?Java 中聊聊的概念。

5.1 類

我們常說“物以類聚”,表達(dá)“ 同類的東西聚在一起”。其實(shí) Java 中的類也可以這么去理解:“物”即客觀存在的“對象”,同類物體的特征描述,即為“類”。

上面是我的個(gè)人理解,用術(shù)語概括就是:類是客觀事物的抽象,或者說是對現(xiàn)實(shí)生活中事物的一種描述(屬性和行為)。

例如前面定義的 Painter 類,是對客觀事物畫筆的抽象,包含了一些繪制的方法(行為)。

5.2 對象與類的關(guān)系

類進(jìn)行實(shí)例化可生成對象,所以,類的具體表現(xiàn)或者實(shí)例就是對象,而對象的抽象或者總概括就是類。

6. 面向?qū)ο蟮娜筇匦?/b>

說到面向?qū)ο螅筒坏貌徽f其三大特性:封裝、繼承和多態(tài)。

下面簡單說說自己的理解吧,就不再貼相關(guān)示例了,網(wǎng)上有很多優(yōu)秀的例子。

6.1 封裝

封裝是面向?qū)ο笞罨A(chǔ)的特性。在前面介紹對象時(shí),提到“一個(gè)對象通常由一組屬性和對這組屬性進(jìn)行操作的若干服務(wù)(方法)構(gòu)成”,這里的構(gòu)成體現(xiàn)的就是封裝性。

封裝,是指對外隱藏對象內(nèi)部的屬性和實(shí)現(xiàn)細(xì)節(jié),只提供相應(yīng)的接口和方法進(jìn)行交互。一方面,外部只需專注于對象所提供的能力,而不用關(guān)心內(nèi)部實(shí)現(xiàn)細(xì)節(jié);另一方面,避免了外部隨意修改或訪問內(nèi)部屬性和方法,從而提升了程序的健壯性;同時(shí),封裝能提升代碼的復(fù)用率。

6.2 繼承

繼承指一個(gè)對象從另一個(gè)對象中獲得屬性和方法的過程,繼承者稱為子類,被繼承者稱為父類。繼承使得子類對象擁有父類對象的全部屬性與方法(非私有)。

Key point:

子類也可以被其他類繼承成為父類;

父類可以擁有多個(gè)子類,但一個(gè)子類只能有一個(gè)父類。這一點(diǎn)與現(xiàn)實(shí)中父親與孩子的關(guān)系是一致的;

Java 中任何類都是 java.lang.Object 的直接或間接子類;

子類不能繼承父類中訪問權(quán)限為 private 的成員變量和方法;

子類可以重寫(override)父類的方法;

子類可以通過 super 關(guān)鍵字訪問父類的成員變量、方法和構(gòu)造器;

final 聲明的類或方法,不能被繼承或重寫;

6.3 多態(tài)

多態(tài)是在繼承的基礎(chǔ)上實(shí)現(xiàn)的,多態(tài)實(shí)現(xiàn)的三個(gè)必要條件:

繼承

方法重寫(override)

父類引用指向子類對象,例如:Human human = new Man(),這里 Man extends Human。

當(dāng)使用多態(tài)方式調(diào)用方法時(shí),會依據(jù)以下規(guī)則:

首先檢查父類中是否有該方法,如果沒有,則編譯錯(cuò)誤;

若子類重寫了該方法,調(diào)用子類的重寫方法;

若子類沒有重寫該方法,則調(diào)用父類的方法;

多態(tài)的好處:可以使程序有良好的擴(kuò)展,并可以對所有類的對象進(jìn)行通用處理。

7. 總結(jié)

以上是本文的全部內(nèi)容,希望能對你有所啟發(fā)。內(nèi)容說不上全面、無誤,還望讀者朋友補(bǔ)充、指正。

最后,感謝閱讀。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/72244.html

相關(guān)文章

  • 夯實(shí)基礎(chǔ)系列一:Java 基礎(chǔ)總結(jié)

    摘要:可實(shí)現(xiàn)單例模式代碼塊初始化靜態(tài)變量,只被執(zhí)行一次內(nèi)部類不能與外部類重名,只能訪問外部類靜態(tài)數(shù)據(jù)包括私有多分支選擇整型或字符類型變量或整數(shù)表達(dá)式開始支持。 前言 大學(xué)期間接觸 Java 的時(shí)間也不短了,不論學(xué)習(xí)還是實(shí)習(xí),都讓我發(fā)覺基礎(chǔ)的重要性?;ヂ?lián)網(wǎng)發(fā)展太快了,各種框架各種技術(shù)更新迭代的速度非???,可能你剛好掌握了一門技術(shù)的應(yīng)用,它卻已經(jīng)走在淘汰的邊緣了。 而學(xué)習(xí)新技術(shù)總要付出一定的時(shí)間...

    greatwhole 評論0 收藏0
  • 深入理解HashMap(一): 源頭說起

    摘要:前言系列文章目錄我們都不陌生也是面試幾乎必問的考點(diǎn)本系列我們來深入思考有關(guān)的設(shè)計(jì)思想和實(shí)現(xiàn)細(xì)節(jié)解決了什么問題任何數(shù)據(jù)結(jié)構(gòu)的產(chǎn)生總對應(yīng)著要解決一個(gè)實(shí)際的問題的產(chǎn)生要解決問題就是如何有效的存取一組鍵值對鍵值對是最常使用的數(shù)據(jù)形式如何有效地存 前言 系列文章目錄 HashMap我們都不陌生, 也是java面試幾乎必問的考點(diǎn), 本系列我們來深入思考有關(guān)HashMap的設(shè)計(jì)思想和實(shí)現(xiàn)細(xì)節(jié). Ha...

    Cristic 評論0 收藏0
  • 夯實(shí)基礎(chǔ)-java equals使用,和 == 的區(qū)別

    摘要:在這些類當(dāng)中有其自身的實(shí)現(xiàn)一般都是用來比較對象的成員變量值是否相同,而不再是比較類在堆內(nèi)存中的存放地址了。舉例說明結(jié)果說明中有其自身的實(shí)現(xiàn),屬于內(nèi)容比較。 在研究hashcode的用法,發(fā)現(xiàn)自己對equals的理解還不夠深,廢話少說,繼續(xù)專研,記錄如下: 要想搞清楚equals和==的區(qū)別,就先要搞清楚JAVA的數(shù)據(jù)類型: showImg(https://segmentfault.co...

    ixlei 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<