Think IN JAVA --------JAVA访问权限控制,
分享于 点击 42880 次 点评:96
Think IN JAVA --------JAVA访问权限控制,
1.JAVA为类中的field以及mehod提供四种访问权限:public protected private (默认访问权限)包访问权限
1>public 修饰的field method ,包内其他的类以及外包中的类均可访问
2>private 修饰的field method , 只有同一类中的其他field 或method 才能访问该field或方法
3>包访问权限 没有任何访问权限控制符修饰的field method默认为包访问权限,只有处于同一包内的其他的类才可以访问,但对于这个包之外的类访问权限为private
4>protected :继承访问权限,a.创建一个新包,并且来自另一个包中继承类,那么唯一可以访问的就是源包中的public b.在同一个包内执行继承工作,就可以操纵所有的包访问权限成员以及public成员 c.protected也提供包访问权限,即处于同一包内的其他的类才可以访问
2.java中的内部类以及处于同一个.java文件下的其他类
A.可以使用private \protected\默认 修饰,但内部类中的field\method必须都有static修饰,因此内部类也必须用static 修饰
1>private 修饰的内部类
public class TestInnerStatic {
private static class InnerClass {
public static void doSomething() {
System.out.println("private Class doSomething");
}
}
public static void main(String[] args) {
InnerClass.doSomething();
}
}
这个地方一定要注意了:内部类中方法只能是static的,因此,内部类也要声明为静态的!
你如果把 public class TestInnerStatic 这个外部类的修饰符改为private,编译器马上就报错了!
不推荐内部类的写法-----这跟面向对象的理念是不协调的。但是作为java程序员,这个基本知识是要懂得,在特殊情况下很有必要使用----访问权限!
</pre><pre class="java" name="code" snippet_file_name="blog_20160906_8_304824" code_snippet_id="1869320">
<span >2>没有任何权限控制符号修饰的内部类</span>
public class CC {
protected int i=5;
private int k=0;
public int s=3;
static class GG{
static int g=0;
}
public static void main(String []args)
{
CC cc=new CC();
System.out.println(GG.g);
}
}
这个 地方一定要注意:内部类中的方法只能是static 的,所以内部类也要申明为静态
</pre><pre class="java" name="code" snippet_file_name="blog_20160906_8_304824" code_snippet_id="1869320">
<span >3>protected修饰的内部类同上所述</span>
<div>package org.c;</div><div>
</div><div>public class CC {
protected int i=5;
private int k=0;
public int s=3;
protected static class GG{
static int g=0;
}
public static void main(String []args)
{
CC cc=new CC();
System.out.println(GG.g);
}
}</div><div>
</div>
B.java中位于同一个.java文件的除内部类以及public类外的其他类,都不可以用private\protected修饰,该类默认拥有包访问权限,即同一个包内的其他类可以访问,但对于这个包之外的类则无法访问
public class CC {
protected int i=5;
private int k=0;
public int s=3;
public static void main(String []args)
{
CC cc=new CC();
System.out.println(new GG().g);
}
}
class GG{
int g=0;
}
相关文章
- 暂无相关文章
用户点评