↵
下面我们首先引出几种访问控制符的权限:
1.什么叫访问控制符
- 软件中的某些属性和方法出于程序安全考虑不允许被其它类操作和调用,这就需要使用Java中的访问权限修饰符,Java中的访问权限修饰符有4种:
其权限从大到小排列则为:public>protected>friendly>private
- Java中的访问权限修饰符可以修饰成员变量、构造方法、普通方法。
2.访问控制符的使用范围
- 访问控制符使用范围:
- public是最大的访问权限修饰符,其修饰的成员变量、构造方法和普通方法可在任何一个类中被操作或使用;
- protected修饰的成员变量、构造方法和普通方法可以在其定义类中、与定义类同包的其它类(可以使子类)中和与定义类不同包但是其子类的类中使用;
- 默认(友好的)修饰的成员变量、构造方法和普通方法可以在其定义类中和与定义类同包的其它类(可以使子类)中使用private是最小的访问权限控制符,其修饰的成员变量、构造方法和普通方法只能在定义它们的类中被操作或使用;
- 另外如果protected修饰的属性和方法均为非静态的,则只能通过子类实例化对象调用其继承过来的属性和方法,而不能使用父类实例化的对象去调用;如果protected修饰的属性和方法均为静态的,则子类可以通过类(子类类名或父类类名)名直接调用,也可通过父类对象直接调用。
3.代码实例
- 首先,我们可以知道,上述四种访问控制符如果都在一个类中,则此时在本类中可以调用这四种访问方法的任意一种。
- 如果在不同类中,我们从之前的学习中可以知道,public在不同类中的同包和不同包中均可以实现调用,而private则都不可以实现调用,因为private的限制比较高,只能在本类中实现调用。
- 下面我们重点用代码操作一下friendly和protected的:
friendly在不同类同包时:
friendly在不同类不同包时,在子类继承和非继承时,子类都不可以实现对父类的调用:
则此时就证明有friendly在不同类的不同包时无论是继承还是非继承,都不能实现子类对父类的属性或方法的调用
因为protected比friendly的访问控制权限更大一些,所以protected在不同类的同包时无论是继承还是非继承,都可以实现子类对父类的调用,下面我们来讨论protected在不同类不同包时继承与非继承两种情况:
则有protected修饰的父类的属性和方法中,在继承时当属性和方法为非静态时,不能用父类对象调用其属性和方法,子类可继承,且只能继承;当父类的属性和方法为静态时,子类可继承,也可用父类类名或父类对象直接调用。
当为非继承时,则不能调用。