private,defualt,protected,public这四个都是修饰java成员的访问权限的。那么大家会被问到,也会被面试到,今天在研究Object.clone()方法时,也遇到了这样的问题,所以我打算整理一下。
同一类下 | 同一包下 | 非包下的子类关系 | 不同包下的非子类 | |
private | √ | |||
defualt | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
因为Object.clone()方法是protected是修饰的,所以今天主要对protected视角进行测试,如果有幸有人看了这篇文章,可以根据下面的例子联想到defualt等。
protected
新建一个表Animal,
属性为有
private String type;
public Integer age;
方法有
protected void fly(){};
public void jiao(){};
1、同一类下:
在本类中添加一个main()方法,Animal animal=new Animal();
可以获取到animal.type,animal.age,animal.fly(),animal.jiao();
注:可以获取到protected属性和private属性。
2、同一包下:
在同一包下新建一个“Orea“类。
在当前类中添加一个main()方法,Animal animal=new Animal();
可以获取到animal.age,animal.fly(),animal.jiao();
注:可以获取到protected属性。
3、非同一包下的子类关系(“非同一包下”指的是不在同一个包下,可以理解为之前的路径只要有不相同就不再一个包下,包含关系也不行)
新建一个类ChildAni继承Animal
在main()方法中新建Animal对象,可以获取到animal.age,animal.jiao();
注:不可以获取到protected属性(这个就相当于非包下,Animal并不是Animal的子类,所以不能获取到)。
在main方法中新建ChildAni对象,可以获取childAni.age,childAni.jiao();childAnianimal.fly();
注:可以获取到protected属性。
4、在非包下的非子类关系
新建一个类ChildAni
在main()方法中新建Animal对象,可以获取到animal.age,animal.jiao();
注:不可以获取到protected属性。