想要搞懂面向?qū)ο螅阒恍枰催@一篇文章

一、什么是面向?qū)ο螅?/h3>

現(xiàn)實(shí)世界中,隨處可見的一種事物就是對象,對象是事物存在的實(shí)體,如人類、書桌、計(jì)算機(jī)、高樓大廈等。人類解決問題的方式總是將復(fù)雜的事物簡單化,于是就會(huì)思考這些對象都是由哪些部分組成的。通常都會(huì)將對象劃分為兩個(gè)部分,即動(dòng)態(tài)部分與靜態(tài)部分。靜態(tài)部分,顧名思義就是不能動(dòng)的部分,這個(gè)部分被稱為“屬性”,任何對象都會(huì)具備其自身屬性,如一個(gè)人,它包括高矮、胖瘦、性別、年齡等屬性。然而具有這些屬性的人會(huì)執(zhí)行哪些動(dòng)作也是一個(gè)值得探討的部分,這個(gè)人可以哭泣、微笑、說話、行走,這些是這個(gè)人具備的行為(動(dòng)態(tài)部分)即方法,人類通過探討對象的屬性和觀察對象的行為了解對象。

二、類(封裝、繼承、多態(tài))

類是封裝對象的屬性和行為的載體,反過來說具有相同屬性和行為的一類實(shí)體被稱為類。

1. 封裝

封裝是面向?qū)ο缶幊痰暮诵乃枷耄瑢ο蟮膶傩院托袨榉庋b起來,而將對象的屬性和行為封裝起來的載體就是類,類通常對客戶隱藏其實(shí)現(xiàn)細(xì)節(jié),這就是封裝的思想。

public class XiYouRenWu {
    private String  name;
    private String  weapon;
    public String getName()
    {
        return(name);
    }


    public void setName( String name )
    {
        this.name = name;
    }


    public String getWeapon()
    {
        return(weapon);
    }


    public void setWeapon( String weapon )
    {
        this.weapon = weapon;
    }


    XiYouRenWu( String n, String w )
    {
        name    = n;
        weapon  = w;
    }
}

2. 繼承

類與類之間同樣具有關(guān)系,如一個(gè)百貨公司類與銷售員類相聯(lián)系,類之間這種關(guān)系被稱為關(guān)聯(lián)。關(guān)聯(lián)是描述兩個(gè)類之間的一般二元關(guān)系,例如一個(gè)百貨公司類與銷售員類就是一個(gè)關(guān)聯(lián),再比如學(xué)生類以及教師類也是一個(gè)關(guān)聯(lián)。兩個(gè)類之間的關(guān)系有很多種,繼承是關(guān)聯(lián)中的一種。

3. 多態(tài)

多態(tài)性允許以統(tǒng)一的風(fēng)格編寫程序,以處理種類繁多的已存在的類以及相關(guān)類。該統(tǒng)一風(fēng)格可以由父類來實(shí)現(xiàn),根據(jù)父類統(tǒng)一風(fēng)格的處理,就可以實(shí)例化子類的對象。由于整個(gè)事件的處理都只依賴于父類的方法,所以日后只要維護(hù)和調(diào)整父類的方法即可,這樣降低了維護(hù)的難度,節(jié)省了時(shí)間。 在提到多態(tài)的同時(shí),不得不提到抽象類和接口,因?yàn)槎鄳B(tài)的實(shí)現(xiàn)并不依賴具體類,而是依賴于抽象類和接口。

三、類的相關(guān)知識

成員變量:在Java中對象的屬性稱為成員變量,也可以稱為屬性。為了了解成員變量,首先定義一個(gè)圖書類,成員變量對應(yīng)于類對象的屬性,在Book類中設(shè)置3個(gè)成員變量id、name、category,分別對應(yīng)于圖書編號、圖書名稱和圖書類別這3個(gè)圖書屬性。

public class Book {
    //定義屬性
    //成員變量
    int id;           //圖書編號
    String name;      //圖書名
    String category;  //圖書類型
}

成員方法:在Java語言中使用成員方法對應(yīng)于類對象的行為。以Book類為例,它包含getName()和setName()兩個(gè)方法,這兩個(gè)成員方法分別為獲取圖書名稱和設(shè)置圖書名稱的方法。定義成員方法的語法格式如下所示:

權(quán)限修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名)
{
... //方法體
return 返回值;
}

public void printName(){            //無返回值的成員方法
        System.out.println(name);
    } public String printCategory(){      //有返回值的成員方法
        return category;
    }

局部變量:局部變量是在方法被執(zhí)行時(shí)創(chuàng)建,在方法執(zhí)行結(jié)束時(shí)被銷毀。局部變量在使用時(shí)必須進(jìn)行賦值操作或被初始化,否則會(huì)出現(xiàn)編譯錯(cuò)誤。

可以將局部變量的有效范圍稱為變量的作用域,局部變量的有效范圍從該變量的聲明開始到該變量的結(jié)束為止。

public void Min(double a,double b,double c){
        double sum;       //sun為局部變量
        sum=a+b+c;    
        System.out.println(sum);
    } 

權(quán)限修飾符:Java中的權(quán)限修飾符主要包括private、public和protected,這些修飾符控制著對類和類的成員變量以及成員方法的訪問。

如果一個(gè)類的成員變量或成員方法被修飾為private,則該成員變量只能在本類中被使用,在子類中是不可見的,并且對其他包的類也是不可見的。

如果將類的成員變量和成員方法的訪問權(quán)限設(shè)置為public,則除了可以在本類使用這些數(shù)據(jù)之外,還可以在子類和其他包中的類中使用。

如果一個(gè)類使用protected修飾符,那么只有本包內(nèi)的該類的子類或其他類可以訪問此類中的成員變量和成員方法。

如果一個(gè)類的訪問權(quán)限被設(shè)置為private,這個(gè)類將隱藏其內(nèi)的所有數(shù)據(jù),以免用戶直接訪問它。如果需要使類中的數(shù)據(jù)被子類或其他包中的類使用,可以將這個(gè)類設(shè)置為public訪問權(quán)限。

public class Book {
    //定義屬性
    //成員變量
    private int id;           //圖書編號
    private String name;      //圖書名
    private String category;  //圖書類型
    public void printName(){            //無返回值的成員方法
        System.out.println(name);
    }
    public String printCategory(){      //有返回值的成員方法
        return category;
    }
}

構(gòu)造方法:構(gòu)造方法是一個(gè)與類同名的方法,對象的創(chuàng)建就是通過構(gòu)造方法完成的。每當(dāng)類實(shí)例化一個(gè)對象時(shí),類都會(huì)自動(dòng)調(diào)用構(gòu)造方法。

構(gòu)造方法的特點(diǎn)如下: 構(gòu)造方法沒有返回值。

構(gòu)造方法的名稱要與本類的名稱相同。

public class Jidongche {
    private String chepai;
    private int chesu;
    private double zaizhong;
    Jidongche(){
        //默認(rèn)存在的構(gòu)造方法
    }}
public class Jidongche {
    private String chepai;
    private int chesu;
    private double zaizhong;
    Jidongche(){                      //直接在構(gòu)造方法中對屬性賦值,可在實(shí)例化對象時(shí)使對象的屬性值初始化
        chepai="XX1234";
        chesu=100;
        zaizhong=100;
    }
}
public class Jidongche {
    private String chepai;
    private int chesu;
    private double zaizhong;

    Jidongche(String chepai,int chesu,double zaizhong){  //帶形參,實(shí)例化對象時(shí)必須傳參數(shù)
        setChepai(chepai);
        setChesu(chesu);
        setZaizhong(zaizhong);
    }

四、寫到最后

今天的Java知識就分享到這里!點(diǎn)關(guān)注,不迷路,關(guān)注程序員曾曾,每天分享不同的Java知識,如果想要知道更多的Java基礎(chǔ)知識以及筆試面試資料我這邊整理了一個(gè)我自己的GitHub倉庫:Java工程師修煉手冊,大家如果有需要可以自行查看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容