访问权限控制

来源:互联网 发布:网络舆论是什么意思 编辑:程序博客网 时间:2024/05/21 09:09

在JAVA中,一共是4种访问权限修饰符

public protected default(默认修饰符,什么都不用写) private,其权限表如下

 全部派生类包内部类内部publicYYYYprotectedNYYYdefaultNNYYprivateNNNY

其中,public的权限最大,protected次之,default第三,private最小

对于public修饰的类,方法,字段,均可在任何地方访问

对于protected修饰的,则只可以在其派生类(继承)及相同包的类中进行访问

缺省的修饰符就是表格中的default,也就是在同一个包内可防伪

private表示只有在类的内部才可以使用该类,方法,字段。


eg1(public and default):

package access.dessert中有一个class Cookie

public class Cookie{

void bite(){};

}

package access中有一个class Dinner

那么在Dinner这个类中可以访问class cookie,比如 new Cookie();

但是不可以调用cookie.bite(),因为默认的修饰符是default,是包访问权限,而两个类的包不同,所以无法访问

虽然这两个类均来自与access这一个包中,但是在这里的包访问权限指的是这个类的上一级目录是否相同,而非指根目录


eg2(private):

class Sundae{<span style="white-space:pre"></span>private Sundae(){}<span style="white-space:pre"></span>static Sundae makeSundae(){<span style="white-space:pre"></span>return new Sundae();<span style="white-space:pre"></span>}}
在这个例子中,将类的构造函数设置为private,则无法通过new Sundae()这一操作来实例化对象,如果一定要实例化对象,就必须通过Sundae.makeSundae()来实现,后续的单例模式会介绍这种做法。


eg3(protected)

protected修饰符提供了派生类,包,类的访问权限,其主要作用在于继承时候的字段修饰,例子如下:

还是eg1中的cookie class,如果不进行任何修改,在Dinner中试图访问bite方法时,会出现错误,因为没有访问权限

下面进行相应修改:

class Dinner extens Cookie

然后将cookie中的bite方法的修饰,改为protected,那么在Dinner中就可以正常访问了.

因为当我们继承一个类时,会将其类中的所有属性,所有方法,内部类都拷贝一份到派生类中(即使是private字段也是如此)。但是由于访问权限的原因,我们不一定能使用这些属性和方法。

protected修饰符提供了派生类的访问权限

所以如果继承于父类,那么父类中拥有的修饰符为public,protected的方法,属性是可以直接调用的!


0 0
原创粉丝点击