类和对象系列教材 (八)- 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。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了

猜你喜欢

转载自www.cnblogs.com/Lanht/p/12441317.html
今日推荐