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 style="font-size:18px;">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 style="font-size:18px;">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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值