国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

面向?qū)ο蟮奶卣髦唬悍庋b

這篇具有很好參考價(jià)值的文章主要介紹了面向?qū)ο蟮奶卣髦唬悍庋b。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.封裝性

1.面向?qū)ο筮@個(gè)編程思想,有三個(gè)基本特征:

① 封裝

② 繼承

③ 多態(tài)

2.什么是封裝性?

生活中,快遞包裹,通常需要用袋子或箱子裝起來(lái)。

目的:① 包含的內(nèi)部商品,不會(huì)被損壞

? ? ? ? ? ?② 可以包含隱私

? ? ? ? ? ?③ 運(yùn)輸更方便

所以,代碼也要考慮這些因素:

① 隱私 -> 安全,當(dāng)某個(gè)類的代碼,內(nèi)部某些成員不希望外部知曉,或者隨意的更改,那么就可以進(jìn)行適當(dāng)?shù)姆庋b

② 外部使用更方便

比如:生活中,洗衣機(jī),只會(huì)留出幾個(gè)簡(jiǎn)單的按鈕和進(jìn)水口,出水口,放衣服的入口這幾個(gè),它隱藏了內(nèi)部復(fù)雜的結(jié)構(gòu)。

代碼中,String類,它內(nèi)部的結(jié)構(gòu)和實(shí)現(xiàn)是很復(fù)雜的,但是我們就算不是特別清除每一個(gè)內(nèi)部實(shí)現(xiàn),也不影響我們簡(jiǎn)單的使用

把代碼控制在它的合理的可見性范圍內(nèi),就是封裝。

3.如何實(shí)現(xiàn)封裝?

必須依賴于權(quán)限修飾符,或者又稱為訪問(wèn)控制修飾符。

4.權(quán)限修飾符有哪些?

public,protected,缺省,private

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??本類? ? ? ? ? ? ? ? 本包的其他類? ? ? ? ? ? ? ? 其他包的子類中? ? ? ? ? ? 其他包的非子類

private? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ?×? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?×? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ×

缺省? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?×? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??×

protected? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?×

public? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?√?

5.權(quán)限修飾符的使用要注意

① 如果權(quán)限修飾符是在class前面(這里暫不討論內(nèi)部類),只能是public或缺省

② 如果權(quán)限修飾符是在類的成員前面(成員變量,成員方法等),四種都可以

二.成員變量選擇那種權(quán)限修飾符?

1.實(shí)際應(yīng)用中,習(xí)慣上,先聲明為private。稱為屬性私有化。

但是如果確實(shí)這個(gè)成員變量需要擴(kuò)大它的可見性范圍,那么可以把private修改為其他合適的修飾符。

例如:擴(kuò)大到本包,那么就是缺省的。

例如:擴(kuò)大到其他包的子類中,那么就是protected

例如:擴(kuò)大到其他包的非子類中,那么就是public

2.為什么要使用權(quán)限修飾符?

因?yàn)閷傩云鋵?shí)就是代表對(duì)象的“數(shù)據(jù)”,那么對(duì)象的數(shù)據(jù)是非常重要的,不應(yīng)該完全暴露,至少要可控。

3.如何使用私有化的屬性?

如果這個(gè)屬性確實(shí)要被外部使用,需要提供get或set方法。

get方法:供調(diào)用者獲取屬性值的方法

set方法:供調(diào)用者修改屬性值的方法

4.get/set方法要注意的地方:

① 如果方法中有局部變量(也就是形參)與對(duì)象的實(shí)例變量“重名”,那么需要在實(shí)例變量的前面加“this.”。如果沒有重名問(wèn)題,在實(shí)例變量前面可以加“this.”,也可以不加“this.”。

② get/set的方法名,通常都是

get + 屬性名,并且屬性名的首字母大寫

set + 屬性名,并且屬性名的首字母大寫

③ 如果屬性是boolean類型,那么它對(duì)應(yīng)的方法,就會(huì)把get單詞換成? is

Student類代碼:

package com.atguigu.encapsulability;
 
public class Student {
    private String name;
    private int score;
    private int age;
    private boolean marry;
 
    //快捷鍵,自動(dòng)生成get/set
    //在要寫get/set方法的位置,鼠標(biāo)的光標(biāo)不要定位錯(cuò)位置了
    //按快捷鍵 Alt + Insert,部分同學(xué)需要同時(shí)按Fn
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getScore() {
        return score;
    }
 
    public void setScore(int score) {
        this.score = score;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        //加條件判斷,加邏輯的控制
        if(age<=20 || age>=35){
            return;
//            throw new IllegalArgumentException(age +"非法");
        }
        this.age = age;
    }
 
    public boolean isMarry() {
        return marry;
    }
 
    public void setMarry(boolean marry) {
        this.marry = marry;
    }
}

對(duì)屬性加上權(quán)限修飾符的話,也就是屬性私有化,可以保證屬性(數(shù)據(jù))的安全,比如說(shuō)設(shè)置屬性值的時(shí)候,屬性私有化就可以在set方法上加條件判斷,看上述代碼。

TestField類代碼:

package com.atguigu.encapsulability;

public class TestField {
    public static void main(String[] args) {
        Student s1 = new Student();
/*        s1.name = "張三";
        s1.score = 89;
        s1.age = 23;
        //以上代碼正常使用沒問(wèn)題,但是如果出現(xiàn)以下代碼
        s1.score = -89;
        s1.age = -23;//沒有設(shè)置權(quán)限修飾符,可以隨便更改屬性值(數(shù)據(jù))
        //這樣寫,邏輯上有問(wèn)題,語(yǔ)法上沒法控制*/
 
        //這里是調(diào)用者的角色,調(diào)用s1學(xué)生對(duì)象的姓名name的get和set
        System.out.println("修改之前,姓名:" + s1.getName());
        s1.setName("張三");
        System.out.println("修改之后,姓名:" + s1.getName());
 
        System.out.println("修改之前,年齡:" + s1.getAge()) ;
        s1.setAge(-23);
        System.out.println("修改之后,年齡:" + s1.getAge()) ;
    }
}

練習(xí)1:

(1)定義矩形類Rectangle,

- 聲明實(shí)例變量長(zhǎng)和寬,全部私有化private,

- 提供相應(yīng)的get/set方法,如果set方法的參數(shù)值<=0,則提示矩形的長(zhǎng)和寬必須是正數(shù)

- 聲明public double area(),返回矩形面積

- 聲明public double perimeter():返回矩形的周長(zhǎng)

- 聲明public String getInfo():返回矩形的長(zhǎng)、寬、面積、周長(zhǎng)信息

(2)測(cè)試類的main中創(chuàng)建一個(gè)可以裝3個(gè)矩形對(duì)象的數(shù)組,并調(diào)用set方法為對(duì)象的屬性賦值,依次長(zhǎng)是8,7,6,寬是2,3,4

- 遍歷輸出矩形對(duì)象數(shù)組

- 按照矩形對(duì)象的length屬性值從小到大排序后,遍歷輸出矩形對(duì)象數(shù)組

- 按照矩形對(duì)象的面積從小到大排序后,遍歷輸出矩形對(duì)象數(shù)組

編寫代碼的習(xí)慣:先寫所有的成員變量的聲明,再寫方法

Rectangle類代碼:

public class Rectangle {
    private double length;
    private double width;
 
    public double getLength() {
        return length;
    }
 
    public void setLength(double length) {
        if(length<=0){
            System.out.println("長(zhǎng)方形的長(zhǎng)必須是正數(shù)");
            return;//結(jié)束當(dāng)前方法的執(zhí)行,那么 this.length = length;就不執(zhí)行了
        }
        this.length = length;
    }
 
    public double getWidth() {
        return width;
    }
 
    public void setWidth(double width) {
        if(width<=0){
            System.out.println("長(zhǎng)方形的寬必須是正數(shù)");
            return;//結(jié)束當(dāng)前方法的執(zhí)行,那么 this.width = width;就不執(zhí)行了
        }
        this.width = width;
    }
 
    public double area(){
        return length * width;
    }
    public double perimeter(){
        return 2 * (length + width);
    }
    public String getInfo(){
        return "長(zhǎng):" + length +",寬:" + width +",面積:" + area() +",周長(zhǎng):" + perimeter();
    }
}

TestRectangle類代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451554.html

public class TestRectangle {
    public static void main(String[] args) {
        Rectangle[] arr = new Rectangle[3];
 
        System.out.println("排序之前:");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new Rectangle();
            arr[i].setLength(8-i);
            arr[i].setWidth(2+i);
            System.out.println(arr[i].getInfo());
        }
 
        System.out.println("按照l(shuí)ength從小到大排序:");
        for(int i = 1; i < arr.length; i++) {
            for(int j = 0; j < arr.length-i; j++) {
                if(arr[j].getLength() > arr[j+1].getLength()){
                    Rectangle temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                 }
            }
        }
 
       for(int i = 0; i < arr.length; i++) {
           System.out.println(arr[i].getInfo());
       }
 
        System.out.println("按照面積從小到大排序:");
       for(int i = 1; i < arr.length; i++) {
           for(int j = 0; j < arr.length-i; j++) {
               if(arr[j].area() > arr[j+1].area()){
                   Rectangle temp = arr[j];
                   arr[j] = arr[j+1];
                   arr[j+1] = temp;
                }
           }
       }
        
       for(int i = 0; i < arr.length; i++) {
           System.out.println(arr[i].getInfo());
       }
 
    }
}

到了這里,關(guān)于面向?qū)ο蟮奶卣髦唬悍庋b的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包