转自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. LeetCode(38)-Valid Sudoku

    题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  2. ruby rails_autolink不能加载的原因

    从rails 3.1.0开始,默认在ActionView::Helper::TextHelper中的auto_link方法已经被移除,放到了第三方的gem里:rails_autolink.遂想试一下其 ...

  3. RecyclerView 与 Scrollview 搭配使用的两个坑

    RecyclerView & Scrollview & wrap_content RecyclerView wrap_content 用android.support.v4.widge ...

  4. R语言并行计算中的内存控制

    R语言使用向量化计算,因此非常容易在集群上进行并行计算.parallel 包提供了非常方便的函数用来进行并行计算,但有一个问题是并行时对于内存中的对象会拷贝多份,因此会比较占内存,这里提供一个比较简易 ...

  5. Memcache 运行情况

    Memcache Memcache是danga.com的一个开源项目,它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的Hash表,能够用来存储各种格式的数据. 查看当前的me ...

  6. web 高并发分析

    <高并发Web系统的设计与优化>的读后感 一口气看完了<高并发Web系统的设计与优化>,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们 ...

  7. Mybatis 系列7

    上篇系列6中 简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介绍mapper映射文件的配置. 这是mybatis的核心之一 一定要学好 在mapper文件中,以mapper作为根 ...

  8. Roundcube Webmail跨站脚本漏洞(CVE-2015-5381 )

    Preface Software: https://roundcube.net/Versions: 1.1.x<1.1.2CVE: CVE-2015-5381Author: sroesemann ...

  9. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  10. jQuery的学习笔记2

    jQuery学习笔记 Day two Chapter two 选择器 类选择器 语法结构:$(“.classname”) javascript里面没有类选择器所以这个时候使用jQuery会更加的简便 ...