Java的四种访问修饰符

   

-------更新一下错误--------------

今天10.25,现在才发现这个错误其实真的很惭愧了,private修饰的变量和方法其实是可以被子类继承的,而且还能被子类复写,但是不能够被访问,所以很多书籍里面都会以为private修饰的是不可被继承的,今天长知识了!

--------------------------以下是原文---------------------------------

在学习java的过程中我被这个概念卡住了,因为在不同包继承父类,并不是所有属性都是可以继承到的,必须是以public所修饰的属性才是可以继承的。所以下面我列举一下四种访问修饰符:

一、类之间的关系

类和类之间的关系有如下几种:
以Hero为例
自身:指的是Hero自己
同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下
不同包子类:Support这个类是Hero的子类,但是在另一个包下
同包类: GiantDragon 这个类和Hero是同一个包,但是彼此没有继承关系
其他类:Item这个类,在不同包,也没有继承关系的类

二、private 私有的

使用private修饰属性 
自身:是可以访问的 
同包子类:不能继承 
不同包子类:不能继承 
同包类:不能访问 
其他包类:不能访问

可以说private是保护程度最深的,这一点在c++中也是一样的

三、package/friendly/default

这个是默认的情况下,也就是说在没有任何的修饰符情况下就是默认的!具体看下代码中的诠释!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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) {

    }

}

 

四、protected受保护的

protected åä¿æ¤ç

绿色底纹代表是允许的,红色字体代表不允许的;下面呈上代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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) {

 

    }

 

}

 

可以看出protected只有不同包不允许访问,但是允许继承,这个也是跟c++中的一样

五、public公共的

既然是公共的那么就是一起共享,公共汽车无论你是哪个地方的人甚至是外国人都是可以搭乘的,所以一张图说明public:

public å¬å±ç

总结:

æ»ç»

那么什么情况该用什么修饰符呢?
从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?

1. 属性通常使用private封装起来
2. 方法一般使用public用于被调用
3. 会被子类继承的方法,通常使用protected
4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西

再就是作用范围最小原则
简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值