254、Java基礎31 - 類和對象【訪問修飾符】 2019.11.16

1、Java訪問修飾符

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

  • 比如public 表示公共的

public String name;
  • 而maxHP 沒有修飾符即代表package/friendly/default
float maxHP

2、類之間的關係

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

3、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) {
 
    }
 
}

4、package/friendly/default 不寫

  • 沒有修飾符即代表package/friendly/default
  • float maxHP; 血量上限
    在這裏插入圖片描述
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) {
 
    }
 
}

5、protected 受保護的

  • 受保護的修飾符
  • protected float hp; 血量
    在這裏插入圖片描述
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) {
 
    }
 
}

6、public 公共的

  • 公共的修飾符
  • public String name; 姓名
  • 任何地方,都可以訪問
    在這裏插入圖片描述
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) {
 
    }
 
}

7、總結

在這裏插入圖片描述

8、思考:那麼在什麼情況下,該用什麼修飾符呢?

  • 那麼什麼情況該用什麼修飾符呢?
  • 從作用域來看,public能夠使用所有的情況。 但是大家在工作的時候,又不會真正全部都使用public,那麼到底什麼情況該用什麼修飾符呢?
  1. 屬性通常使用private封裝起來
  2. 方法一般使用public用於被調用
  3. 會被子類繼承的方法,通常使用protected
  4. package用的不多,一般新手會用package,因爲還不知道有修飾符這個東西
  • 再就是作用範圍最小原則
  • 簡單說,能用private就用private,不行就放大一級,用package
  • 再不行就用protected
  • 最後用public
  • 這樣就能把數據儘量的封裝起來,沒有必要露出來的,就不用露出來了

9、參考鏈接

[01] How2j - 類和對象系列教材 (八)- JAVA的四種訪問修飾符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章