当前位置:   article > 正文

java访问权限friendly_Java的访问权限

java的fridenly就是 缺省吗

一.Java访问权限饰词(access specifiers)

Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。

1. friendly

1) 果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。

2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package, 但隶属于相同的default package。

class Sundae{

//以下两个方法缺省为friendly

Sundae(){}

Void f() {System.out.println(“Sundae.f()”);

}

public class IceCream{

public static void main(String[] args){

Sundae x = new Sundae();

x.f();

}

}

2. public:可以被任何class调用

3. private:private成员只能在成员所属的class内被调用,如:

class Sundae{

private Sundae(){}//只能在Sundae class中被调用

Sundae(int i) {}

static Sundae makASundae() {

return new Sundae();

}

}

public class IceCream{

public static void main(String[] args){

// Sundae class中构造函数Sundae()是private,

// 所以不能用它进行初始化

//Sundae x = new Sundae();

Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用

Sundae z = Sundae.makASundae();

}

}

4. protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。

二.Class的访问权限

1.Class同样具有public、protect、friendly、private四种访问访问权限:

1)public:在任何地方都可被使用

2)protect、private:除了它自己,没有任何class可以使用,所以class不能是

protected或private(inner class除外),下面给出inner class的访问权限修饰符的分析:

public class Outer {

private class Inner{

}

}

在Outer同包中的一个类Test中如果有

class Test {

Outer outer = new Outer();

Outer.Inner inner = outer.new Inner();

}

可以把Inner类看做Outer类的一个方法或成员变量,如果Inner为private则在Test中创建Outer.Inner的对象会出错,如果把上面的private class Inner改为class Inner则在Test中创建

Outer.Inner的对象则不会出错。对应private的Inner类,只可以在Outer类中使用new Inner()来创建对象。

3) friendly:同一个package中的classes能用

2. 如何调用构造函数被声明为private的class

1) 用static函数

2) 用Singteton模式

class Soup{

private Soup(){}

//(1)静态函数方法

public static Soup makeSout(){

return new Soup();

}

//(2)The "Singleton" pattern:

private static Soup ps1 = new Soup();

public static Soup access(){

return ps1;

}

public void f(String msg){

System.out.println("f(" + msg + ")");

}

}

public class Lunch{

public static void main(String[] args){

//Soup priv1 = new Soup();编译错误

Soup priv2 = Soup.makeSout();

Soup priv3 = Soup.access();

priv2.f("priv2");

priv3.f("priv3");

}

总结:访问java的类中的方法或变量要经过两重检测,首先要通过被访问的class的访问修饰符的检测,然后再通过被访问的class中的目标方法或变量的修饰符的检测。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/194187
推荐阅读
相关标签
  

闽ICP备14008679号