0、目錄
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,那麼到底什麼情況該用什麼修飾符呢?
- 屬性通常使用private封裝起來
- 方法一般使用public用於被調用
- 會被子類繼承的方法,通常使用protected
- package用的不多,一般新手會用package,因爲還不知道有修飾符這個東西
- 再就是作用範圍最小原則
- 簡單說,能用private就用private,不行就放大一級,用package
- 再不行就用protected
- 最後用public
- 這樣就能把數據儘量的封裝起來,沒有必要露出來的,就不用露出來了