欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java面向?qū)ο蠡A(chǔ)知識(shí)之封裝,繼承,多態(tài)和抽象

 更新時(shí)間:2021年11月08日 15:03:56   作者:一指流砂~  
這篇文章主要介紹了Java面向?qū)ο蟮姆庋b,繼承,多態(tài)和抽象,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下

一、封裝

封裝:是面向?qū)ο蠓椒ǖ闹匾瓌t,就是把對(duì)象的屬性和行為(數(shù)據(jù))結(jié)合為一個(gè)獨(dú)立的整體,并盡可能隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),就是把不想告訴或者不該告訴別人的東西隱藏起來(lái),把可以告訴別人的公開(kāi),別人只能用我提供的功能實(shí)現(xiàn)需求,而不知道是如何實(shí)現(xiàn)的。增加安全性

public class Person {
    private String name;
    private int gender;
    private int age;
    public String getName() {
        return name;
    }
    public String getGender() {
        return gender == 0 ? "man" : "woman";
    }
    public void work() {
        if (18 <= age && age <= 50) {
            System.out.println(name + " is working very hard!");
        } else {
            System.out.println(name + " can't work any more!");
        }
    }
}

以上 Person 類(lèi)封裝 name、gender、age 等屬性,外界只能通過(guò) get() 方法獲取一個(gè) Person 對(duì)象的 name 屬性和 gender 屬性,而無(wú)法獲取 age 屬性,但是 age 屬性可以供 work() 方法使用。

注意到 gender 屬性使用 int 數(shù)據(jù)類(lèi)型進(jìn)行存儲(chǔ),封裝使得用戶(hù)注意不到這種實(shí)現(xiàn)細(xì)節(jié)。并且在需要修改 gender 屬性使用的數(shù)據(jù)類(lèi)型時(shí),也可以在不影響客戶(hù)端代碼的情況下進(jìn)行。

二、繼承

繼承:是面向?qū)ο笞铒@著的一個(gè)特性,繼承是從已有的類(lèi)中派生出新的類(lèi)稱(chēng)為子類(lèi),子類(lèi)繼承父類(lèi)的數(shù)據(jù)屬性和行為,并能根據(jù)自己的需求擴(kuò)展出新的行為,提高了代碼的復(fù)用性。

Animal animal = new Cat();

繼承應(yīng)該遵循里氏替換原則,子類(lèi)對(duì)象必須能夠替換掉所有父類(lèi)對(duì)象。

三、多態(tài)

多態(tài):指允許不同的對(duì)象對(duì)同一消息做出相應(yīng)。即同一消息可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式(發(fā)送消息就是函數(shù)調(diào)用)。封裝和繼承幾乎都是為多態(tài)而準(zhǔn)備的,在執(zhí)行期間判斷引用對(duì)象的實(shí)際類(lèi)型,根據(jù)其實(shí)際的類(lèi)型調(diào)用其相應(yīng)的方法。

多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)多態(tài)主要指方法的重載,運(yùn)行時(shí)多態(tài)指程序中定義的對(duì)象引用所指向的具體類(lèi)型在運(yùn)行期間才確定。

//父類(lèi)
public class Base {
    protected void show() {}
}
//子類(lèi)
class Kid: Base {
     public  void show() {
        System.out.println(" i am  kid");
    }
}
public static void main( String[] args )
    {
        Base base =  new Kid();
        base.show();
    }

四、抽象

抽象是從眾多的事物中抽取出共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征。

例如蘋(píng)果、香蕉、生梨、葡萄、桃子等,它們共同的特性就是水果。得出水果概念的過(guò)程,就是一個(gè)抽象的過(guò)程。

要抽象,就必須進(jìn)行比較,沒(méi)有比較就無(wú)法找到共同的部分。

共同特征是指那些能把一類(lèi)事物與他類(lèi)事物區(qū)分開(kāi)來(lái)的特征,這些具有區(qū)分作用的特征又稱(chēng)本質(zhì)特征。

因此抽取事物的共同特征就是抽取事物的本質(zhì)特征,舍棄不同特征。

所以抽象的過(guò)程也是一個(gè)裁剪的過(guò)程,不同的、非本質(zhì)性的特征全部裁剪掉了。

所謂的共同特征,是相對(duì)的,是指從某一個(gè)刻面看是共同的。

比如,對(duì)于汽車(chē)和大米,從買(mǎi)賣(mài)的角度看都是商品,都有價(jià)格,這是他們的共同的特征,而從其他方面來(lái)比較是,他們則是不同的。

所以在抽象時(shí),同與不同,決定于從什么角度上來(lái)抽象。抽象的角度取決于分析問(wèn)題的目的。

在軟件開(kāi)發(fā)過(guò)程中,識(shí)別穩(wěn)定的需求、識(shí)別核心的需求、識(shí)別概念性的需求、設(shè)計(jì)系統(tǒng)的架構(gòu)、定義系統(tǒng)中構(gòu)件之間的接口關(guān)系等等都是抽象的過(guò)程,都是反應(yīng)系統(tǒng)的本質(zhì)特征的過(guò)程。

抽象的,才是穩(wěn)定的,才是永恒的。 抽象的反義詞是具體。人員往往會(huì)說(shuō):“你講的太抽象了,能不能講的具體一點(diǎn)?”

在開(kāi)發(fā)語(yǔ)言中,有抽象類(lèi),有具體類(lèi),具體類(lèi)可以繼承自抽象類(lèi),可以實(shí)例化。抽象類(lèi)可以派生出眾多的不同的具體類(lèi)。

所謂:“一生二,二生三,三生萬(wàn)物”。系統(tǒng)的穩(wěn)定體現(xiàn)在抽象類(lèi),系統(tǒng)的變化體現(xiàn)在具體類(lèi)。抽象類(lèi)的層次要高于具體類(lèi)。

系統(tǒng)因抽象而穩(wěn)定,因抽象而生動(dòng)。

抽象用 abstract 關(guān)鍵字來(lái)修飾,用 abstract 修飾類(lèi)時(shí),此類(lèi)就不能被實(shí)例化,從這里可以看出,抽象類(lèi)就是為了繼承而存在的,

如果定義了一個(gè)抽象類(lèi)而不去繼承它,那么等于白白創(chuàng)建了這個(gè)抽象類(lèi),因?yàn)槟悴荒苡盟鼇?lái)做任何事情,用 abstract 修飾方法時(shí),此方法就是抽象方法,抽象方法必須存在于抽象類(lèi)中,抽象方法沒(méi)有方法體,

對(duì)于一個(gè)父類(lèi)來(lái)說(shuō),如果它的某個(gè)方法在父類(lèi)中實(shí)現(xiàn)出來(lái)沒(méi)有任何意義,必須根據(jù)子類(lèi)的實(shí)際需求來(lái)進(jìn)行不同的實(shí)現(xiàn),那么就可以將這個(gè)方法聲明為抽象方法,抽象方法的修飾符必須為 public 或者 protected ,因?yàn)橛?private,則不能被子類(lèi)繼承,子類(lèi)便無(wú)法實(shí)現(xiàn)該方法,缺省情況下默認(rèn)為 public 。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java函數(shù)式編程(十):收集器

    Java函數(shù)式編程(十):收集器

    這篇文章主要介紹了Java函數(shù)式編程(十):收集器,本文是系列文章的第10篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • 深入剖析ArrayList的remove方法

    深入剖析ArrayList的remove方法

    這篇文章主要介紹了ArrayList的remove方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。</p>
    2021-09-09
  • java讀取json文件的2種方式例子

    java讀取json文件的2種方式例子

    這篇文章主要給大家介紹了關(guān)于java讀取json文件的2種方式,在開(kāi)發(fā)過(guò)程中有時(shí)會(huì)遇到需要讀取.json文件的需求,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 詳解Java中方法重寫(xiě)和方法重載的6個(gè)區(qū)別

    詳解Java中方法重寫(xiě)和方法重載的6個(gè)區(qū)別

    方法重寫(xiě)和方法重載都是面向?qū)ο缶幊讨?,那么方法重?xiě)和方法重載有哪些區(qū)別,本文就詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下
    2022-01-01
  • Java程序員面試中的多線程問(wèn)題總結(jié)

    Java程序員面試中的多線程問(wèn)題總結(jié)

    這篇文章收集了 Java 線程方面一些典型的問(wèn)題,這些問(wèn)題經(jīng)常被高級(jí)工程師所問(wèn)到。這篇文章收集了 Java 線程方面一些典型的問(wèn)題,這些問(wèn)題經(jīng)常被高級(jí)工程師所問(wèn)到。
    2016-11-11
  • 詳解如何實(shí)現(xiàn)SpringBoot的底層注解

    詳解如何實(shí)現(xiàn)SpringBoot的底層注解

    今天給大家?guī)?lái)的文章是如何實(shí)現(xiàn)SpringBoot的底層注解,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java字符串相關(guān)類(lèi)StringBuffer的用法詳解

    Java字符串相關(guān)類(lèi)StringBuffer的用法詳解

    java.lang包下的StringBuffer類(lèi),代表著可變的字符序列,可以用來(lái)對(duì)字符串內(nèi)容進(jìn)行增刪改操作。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)它的用法,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • java中的取整與四舍五入方法實(shí)例

    java中的取整與四舍五入方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于java中取整與四舍五入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • springboot-rabbitmq-reply?消息直接回復(fù)模式詳情

    springboot-rabbitmq-reply?消息直接回復(fù)模式詳情

    這篇文章主要介紹了springboot-rabbitmq-reply消息直接回復(fù)模式詳情,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 分享15款Java程序員必備的開(kāi)發(fā)工具

    分享15款Java程序員必備的開(kāi)發(fā)工具

    這篇文章主要介紹了分享15款Java程序員必備的開(kāi)發(fā)工具,需要的朋友可以參考下
    2015-02-02

最新評(píng)論