類和對象系列教材 (八)- Java的四種訪問修飾符

成員變量有四種修飾符
private 私有的
package/friendly/default 不寫
protected 受保護的
public 公共的

比如public 表示公共的

public String name;


而maxHP 沒有修飾符即代表package/friendly/default

float maxHP

步驟1:類之間的關係
步驟2:private 私有的
步驟3:package/friendly/default 不寫
步驟4:protected 受保護的
步驟5:public 公共的
步驟6:總結
步驟7:那麼什麼情況該用什麼修飾符呢?

示例 1 : 類之間的關係

類和類之間的關係有如下幾種:
以Hero為例
自身:指的是Hero自己
同包子類:ADHero這個類是Hero的子類,並且和Hero處於同一個包下
不同包子類:Support這個類是Hero的子類,但是在另一個包下
同包類: GiantDragon 這個類和Hero是同一個包,但是彼此沒有繼承關係
其他類:Item這個類,在不同包,也沒有繼承關係的類

類之間的關係

示例 2 : private 私有的

使用private修飾屬性
自身:是可以訪問的
同包子類:不能繼承
不同包子類:不能繼承
同包類:不能訪問
其他包類:不能訪問

注: 紅色字體,表示不可行

private 私有的

package charactor;

 

import property.Weapon;

 

public class Hero {

 

    //屬性id是private的,只有Hero自己可以訪問

    //子類不能繼承

    //其他類也不能訪問

    private int id;

     

    String name;

 

    float hp;

 

    float armor;

 

    int moveSpeed;

 

    public void equip(Weapon w) {

 

    }

 

}

示例 3 : package/friendly/default 不寫

沒有修飾符即代表package/friendly/default 
float maxHP; 血量上限

package/friendly/default 不寫

package charactor;

 

import property.Weapon;

 

public class Hero {

    private int id;

 

    String name;

 

    // 無修飾符的屬性 hp

    // 自己可以訪問

 

    // 同包子類可以繼承

    // 不同包子類不能繼承

 

    // 同包類可以訪問

    // 不同包類不能訪問

    float hp;

 

    float armor;

 

    int moveSpeed;

 

    public void equip(Weapon w) {

 

    }

 

}

示例 4 : protected 受保護的

受保護的修飾符
protected float hp; 血量

protected 受保護的

package charactor;

 

import property.Weapon;

 

public class Hero {

    private int id;

 

    String name;

 

    // protected飾符的屬性 hp

    // 自己可以訪問

 

    // 同包子類可以繼承

    // 不同包子類可以繼承

 

    // 同包類可以訪問

    // 不同包類不能訪問

    protected float hp;

 

    float armor;

 

    int moveSpeed;

 

    public void equip(Weapon w) {

 

    }

 

}

示例 5 : public 公共的

公共的修飾符 
public String name; 姓名 
任何地方,都可以訪問

public 公共的

package charactor;

 

import property.Weapon;

 

public class Hero {

    private int id;

 

    // public的屬性 name

    // 自己可以訪問

 

    // 同包子類可以繼承

    // 不同包子類可以繼承

 

    // 同包類可以訪問

    // 不同包類可以訪問

    public String name;

 

    protected float hp;

 

    float armor;

 

    int moveSpeed;

 

    public void equip(Weapon w) {

 

    }

 

}

示例 6 : 總結

總結

示例 7 : 那麼什麼情況該用什麼修飾符呢?

那麼什麼情況該用什麼修飾符呢?
從作用域來看,public能夠使用所有的情況。 但是大家在工作的時候,又不會真正全部都使用public,那麼到底什麼情況該用什麼修飾符呢?

1. 屬性通常使用private封裝起來
2. 方法一般使用public用於被調用
3. 會被子類繼承的方法,通常使用protected
4. package用的不多,一般新手會用package,因為還不知道有修飾符這個東西

再就是作用範圍最小原則
簡單説,能用private就用private,不行就放大一級,用package,再不行就用protected,最後用public。 這樣就能把數據儘量的封裝起來,沒有必要露出來的,就不用露出來


更多內容,點擊瞭解: https://how2j.cn/k/class-object/class-object-modifier/295.html