how2j.cn

成员变量有四种修饰符
private 私有的
package/friendly/default 不写
protected 受保护的
public 公共的

比如public 表示公共的
public String name;

而maxHP 没有修饰符即代表package/friendly/default
float maxHP

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



18分51秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



示例 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。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2017-12-27 继承和访问的区别是什么,属性可以继承不能访问时什么意思?
srz
意思是只有属性应用是叫做继承,其他的都叫做访问吗








答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-09-14 关于private field的一点疑惑
wenhu
可以明确的是,如果一个类包含有私有属性,那么其他任何外部类在设计时,是无法直接调用这个属性的,这体现了封装性。 但从对象角度来说,如果这个类实例化出一个对象,那么它可以直接访问自己的私有属性,比如 class Test { private int i; } Test t = new Test(); t.i = 10; t.i = 20; 像这样的访问是合法的,请问站长,那么对象的封装性如何被保护呢?好好的一个提莫,我可以随意给他改个名字叫莫提,这不很蛋疼吗?








答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-08-03 示例4:protected代码的注释有问题
2016-12-29 不同包的子类继承了另一包的Hero类,可以继承protected修饰的属性name,但为什么却不能使用Hero h=new Hero(),然后使用h.name 呢,提示一定要用public修饰
2016-04-22 protected属性被同包子类继承之后的访问权限




提问之前请登陆
关于 JAVA 基础-类和对象-访问修饰符 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图