App下載

帶你理解Java中關(guān)于面向?qū)ο蟮哪切┦聝?/h1>
萌癌蘿莉 2021-08-07 16:22:17 瀏覽數(shù) (1653)
反饋

一、面向?qū)ο蟮睦斫?/h2>

首先,要清楚一點(diǎn),與面向過(guò)程不同,面向?qū)ο笥兄约邯?dú)特的優(yōu)勢(shì)。舉個(gè)通俗的例子,設(shè)想我們要得到一把椅子,面向過(guò)程的話(huà)我們可能需要通過(guò)買(mǎi)木材,設(shè)計(jì)圖紙,最后切割而成。但對(duì)于面向?qū)ο髞?lái)說(shuō),我們只需找到一個(gè)家具店,買(mǎi)一把椅子即可。

 面向?qū)ο笠彩荍ava語(yǔ)言的特點(diǎn)之一,其實(shí)從idea中不難看出,這種面向?qū)ο蟮恼Z(yǔ)言所具有:

1.易維護(hù)

2.易復(fù)用

3.易擴(kuò)展

二、三大特性

2.1 繼承(extends):

顧名思義,是獲取原有的基礎(chǔ),在此基礎(chǔ)上進(jìn)行操作的一個(gè)過(guò)程。使用已存在的類(lèi)的定義作為基礎(chǔ),可以增加新的屬性的一個(gè)過(guò)程。(在java中,繼承是用于子類(lèi)與父類(lèi)之間)

例如:

1.先定義一個(gè)父類(lèi)(動(dòng)物)

202104210830161

2.定義一個(gè)子類(lèi)(貓)

202104210830162

其中,貓作為動(dòng)物,可以繼承動(dòng)物中的吃食物的特性,此外,貓具有喜歡抓老鼠的特性。

3.進(jìn)行測(cè)試

202104210830163
202104210830174

從上述這個(gè)簡(jiǎn)單的例子可以看出,繼承是通過(guò)extends關(guān)鍵字來(lái)實(shí)現(xiàn)的,貓的類(lèi)中沒(méi)有定義吃食物的屬性,但是繼承后可以使用吃食物的屬性(可以提高代碼的復(fù)用性)。

關(guān)于繼承:

1.子類(lèi)不能選擇性的繼承父類(lèi),只要選擇繼承,就要繼承全部(除了父類(lèi)中private修飾的屬性和方法)
2.子類(lèi)是對(duì)父類(lèi)的一個(gè)擴(kuò)展,可以有屬于自己的屬性和方法
3.java是單繼承,但可以多重繼承(也就是有一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi),但是一個(gè)父類(lèi)可以有多個(gè)子類(lèi)。通俗來(lái)說(shuō),就是你的爸爸可以有多個(gè)孩子,但這些孩子只有一個(gè)爸爸。)

2.2 封裝(private):

封裝的定義:

將一些細(xì)節(jié)信息私有化,并且提供給外界可以對(duì)其訪(fǎng)問(wèn)其屬性的方法(如果不提供,那么這個(gè)封裝沒(méi)有意義)

特點(diǎn):

被private修飾的類(lèi)的權(quán)限最低,也最為安全,其安全性與其易維護(hù)性顯著.

例如:

public class Fengzhuang {
    private int chang;//成員屬性
    private int kuan;
    private int di;
    private int gao;

    public Fengzhuang() {//無(wú)參構(gòu)造
    }

    public Fengzhuang(int chang, int kuan, int di, int gao) {//帶參構(gòu)造
        this.chang = chang;
        this.kuan = kuan;
        this.di = di;
        this.gao = gao;
    }

    public int getChang() {
        return chang;
    }

    public void setChang(int chang) {
        this.chang = chang;
    }

    public int getKuan() {
        return kuan;
    }

    public void setKuan(int kuan) {
        this.kuan = kuan;
    }

    public int getDi() {
        return di;
    }

    public void setDi(int di) {
        this.di = di;
    }

    public int getGao() {
        return gao;
    }

    public void setGao(int gao) {
        this.gao = gao;
    }

    public void mj(int chang,int kuan,int di,int gao){
        int sum=chang*kuan;
        int sum2=di*gao/2;
        System.out.println("長(zhǎng)方形的面積為"+sum+"三角形的面積為"+sum2);

    }
}

這個(gè)例子中,將長(zhǎng)方形和三角形的面積封裝起來(lái),作為一個(gè)方法來(lái)使用

進(jìn)行測(cè)試

public class Fengzhuangtest {
    public static void main(String[] args) {
        Fengzhuang FZ = new Fengzhuang();
        FZ.mj(5,4,6,7);
;
    }
}

202104210830175

關(guān)于封裝:

方法和private修飾的類(lèi)都是封裝的形式,當(dāng)大家遇到這種只需變換數(shù)字(長(zhǎng)和寬,底和高)的情況,可以封裝為方法,方便大家使用.

2.3 多態(tài):

多態(tài)定義:

允許不同對(duì)象對(duì)同一消息做出不同的響應(yīng),

實(shí)現(xiàn)多態(tài)的條件:

要想實(shí)現(xiàn)多態(tài),必須滿(mǎn)足繼承,重寫(xiě),父類(lèi)引用指向子類(lèi)對(duì)象三大必要條件(又分為向上轉(zhuǎn)型,向下轉(zhuǎn)型)

 向上轉(zhuǎn)型:

父類(lèi)類(lèi)型變量名= new 子類(lèi)類(lèi)型
這種情況一般適用于父類(lèi)完全滿(mǎn)足需求,我們不需要再去添加新的屬性

 向下轉(zhuǎn)型:

子類(lèi)類(lèi)型 變量名=子類(lèi)類(lèi)型 父類(lèi)類(lèi)型的變量
這種情況一般適用于父類(lèi)滿(mǎn)足不了需求,需要用到子類(lèi)所特有的方法時(shí)使用

例如:

1.先定義一個(gè)父類(lèi)(動(dòng)物都有吃的功能)

202104210830176

2.定義兩個(gè)子類(lèi)(貓,狗)

202104210830177
202104210830178

在這個(gè)例子中,同樣都是吃東西,對(duì)貓這個(gè)對(duì)象來(lái)說(shuō),是吃魚(yú),對(duì)狗來(lái)說(shuō),是吃骨頭,是多態(tài)的體現(xiàn)

3.進(jìn)行測(cè)試

202104210830189

在這里插入圖片描述

三、自動(dòng)裝箱與自動(dòng)拆箱

3.1 自動(dòng)裝箱

自動(dòng)將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)化為包裝類(lèi)類(lèi)型

3.2 自動(dòng)拆箱

自動(dòng)將包裝類(lèi)類(lèi)型轉(zhuǎn)化為基本數(shù)據(jù)類(lèi)型

四、小結(jié)

提到面向?qū)ο?大家應(yīng)該立馬想到它的三大特性,了解其基礎(chǔ)概念.多敲代碼,多做題,在案例中體會(huì)三大特性

到此本篇關(guān)于Java中面向?qū)ο竽切┦聝旱暮?jiǎn)單總結(jié)的文章就介紹結(jié)束了,想要了解更多相關(guān)java面向?qū)ο髢?nèi)容,請(qǐng)搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持!

0 人點(diǎn)贊