转自http://blog.csdn.net/a1237871112/article/details/50926975

  及http://blog.csdn.net/blackmanren/article/details/9249381

俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制。

Java一共有四种权限,private (私有)public(公有)Protected(受保护)还有友好型

在java里,这些语句都可以修饰类中的成员变量和方法,但是只有public和友好型可以修饰类。

  • 1. 不用priavate,public,protected修饰的成员变量和方法被称为友好变量和友好方法
  • 2. 当在另外一个类B中,用该类A创建了一个对象后,如果类A和类B在同一个包中,那么该对象能访问自己的友好变量和友好方法
  • 3. 在class前面加public的类称为public类,class前面不能加protected和private,不加public的类称为友好类。
  • 4. public类默认的构造方法是public,友好类默认的构造方法是友好的。

举个例子:

接下来就详细解释一下这几种权限的差别(博客最后有表格)按权限由低到高:(高权限有低权限所有特性)

Private:

类中的所有private方法和private 成员变量只能在类中访问而不能在其他类中访问。

例如:

  1. package Main;
  2. public class Private {
  3. private int a;
  4. private int b;
  5. Protected (){
  6. this.a=1;
  7. this.b=2;//a和b只能在Private类中调用
  8. }
  9. private void set(){
  10. System.out.println(""+a+""+b+"\n");
  11. }
  12. void Print(){
  13. this.set();//只能在这里用;
  14. }
  15. }

友好型和protected:

如果在另一个类中声明其他的一个类,如果这两个在一个包中那么另一个类能访问这个其他类的友好型变量不同包不能访问:

如果在另一个B类中声明其他的一个类A,如果这两个在一个包中那么另一个类B也能能访问这个其他类A的protected变量(或方法),如果不在一个包,那么如果类A有一个父类C如果,如果父类C中有一个protected变量(或方法),只要B,C在一个包中,B就能使用A中从父类继承的protected方法。如果A是B的子类,如果AB不在一个包中,那么A可以使用B中protected方法。

例如:

  1. package Main;
  2. import Protected.*;
  3. public class Main {
  4. public static void main(String args[]){
  5. Protected jkl=new Protected();
  6. jkl.Print();//调用jkl父类的protect方法
  7. Frindly prot =new Frindly();
  8. System.out.println(prot.a);//在Main类中调用友好型的变量
  9. prot.set();//在Main类中调用友好型的方法
  10. }
  11. }
  12. package Main;
  13. public class Frindly {
  14. int a,b,c,d;
  15. Frindly(){
  16. a=b=c=d=1;
  17. }
  18. void set (){
  19. System.out.print(""+a+" "+b+"\n");
  20. }
  21. }
  22. package Main;
  23. public class Protectedfather{
  24. protected int a;
  25. private int b;
  26. protected Protectedfather (){
  27. this.a=1;
  28. this.b=2;//a和b只能在Protected中调用
  29. }
  30. private void set(){
  31. System.out.println(""+a+""+b+"\n");
  32. }
  33. protected void Print(){
  34. this.set();//只能在这里用;
  35. }
  36. }
  37. package Protected;
  38. import Main.*;
  39. public class Protected extends Protectedfather{
  40. public Protected(){
  41. super();//在另一个包中调用里父类中的protect构造方法
  42. super.a=12;//调用父类的protect变量
  43. }
  44. }

Public:

如果类中的方法或者变量是public,那么就可以在别的类中调用,没有限制(用在夸包)。A带掉用别的包中的B类

  1. package Main;
  2. import Public.*;
  3. public class Main {
  4. public static void main(String args[]){
  5. int a;
  6. Public p=new Public();//调用public类中的public方法
  7. a=p.a;//调用Public类中的public变量
  8. p.set();
  9. }
  10. }
  11. package Public;
  12. public class Public {
  13. public int a=12;
  14. public void set (){
  15. System.out.println("OK\n");
  16. }
  17. }

总结表格::

同一类

同包

不同包

子类

非子类

子类

非子类

Private

友好型

Protected

Public

java面向对象中四种权限(private,protected,public,友好型)详解的更多相关文章

  1. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  2. java中四种权限修饰符区别

    总的概括:public > protected > (default) > private 细分见下表格: 权限修饰符 public protected (default) priv ...

  3. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  4. js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  5. js中几种实用的跨域方法原理详解【转】

    源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...

  6. 【转】js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  7. Linux中的特殊权限粘滞位(sticky bit)详解

    Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...

  8. 【转】Linux中的特殊权限粘滞位(sticky bit)详解

    Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...

  9. Java正则中为什么反斜线"\"需要用“\\\\”表示,原因详解。

    首先,我们需要知道在java字符串和正则表达式中,“\”都具有特殊的含义. 一.在Java的字符串中"\"有两个功能 (一)代表特殊字符:\t代表制表符,\n代表换行....等. ...

随机推荐

  1. ruby中printf "%x"%-4为何会打印开头..

    先看一下ruby中printf "%x" % -4的返回结果: irb(main):134:0> printf "%x\n" % -4 ..fc 前面的. ...

  2. ios中block访问外部变量的一些注意点

    Block类型是一个C级别的语法和运行机制.它与标准的C函数类似,不同之处在于,它除了有可执行代码以外,它还包含了与堆.栈内存绑定的变量.因此,Block对象包含着一组状态数据,这些数据在程序执行时用 ...

  3. day09_request&response学习笔记

    ============================================================ 一.HttpServletResponse接口 p.MsoNormal { m ...

  4. climbing stairs(爬楼梯)(动态规划)

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  5. Oracle删除重复行

    Oracle删除重复行 分类: ORACLE2010-12-12 17:10 423人阅读 评论(0) 收藏 举报 oracletabledeleteintegerinsert.net 查询及删除重复 ...

  6. 14 Live CDs for Penetration Testing (Pen Test) and Forensic

    http://www.ivizsecurity.com/blog/penetration-testing/live-cd-penetration-testing-pen/ Yesterday I wa ...

  7. Ubuntu设置代理的方法

    用过Linux的都知道,众多的PROXY配置,让人应接不暇,本文列出常见的一些PROXY的配置 1.apt-get proxy 的配置sudo gedit /etc/apt/apt.conf NOTE ...

  8. Python实现PPPOE攻击工具

    前言 大家可能对PPPOE不是很熟悉,但是肯定对拨号上网非常熟悉,拨号上网就是用的这种通信协议.一般PPPOE认证上网主要用于校园网或者小区网中,拨号界面如下图所示. 但是PPPOE这种通信协议,是有 ...

  9. tomcat 绑定ipv4端口

    在<tomcat>/bin目录打开catalina.sh,然后添加如下内容: JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=t ...

  10. es6(六):module模块(export,import)

    es6之前,社区模块加载方案,主要是CommonJS(用于服务器)和AMD(用于浏览器) 而es6实现的模块解决方案完全可以替代CommonJS和AMD ES6模块设计思想:尽量静态化,在编译时就能确 ...