转自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. 二、添加 Insert into

    文档目录 开始使用  初始化查询实例: LambdaToSql.SqlClient DB = new LambdaToSql.SqlClient(); 添加实体数据 ", IP = &quo ...

  2. Java IO学习--(四)网络

    Java中网络的内容或多或少的超出了Java IO的范畴.关于Java网络更多的是在我的Java网络教程中探讨.但是既然网络是一个常见的数据来源以及数据流目的地,并且因为你使用Java IO的API通 ...

  3. 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

    基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...

  4. 轻松解决oracle11g 空表不能exp导出的问题

    轻松解决oracle11g 空表不能exp导出的问题 [引用 2012-9-22 18:06:36]     字号:大 中 小 oracle11g的新特性,数据条数是0时不分配segment,所以就不 ...

  5. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  6. Python测试远程端口连接时间

    问题 最近自己服务器访问别人的服务器,有时候会报超时错误,有时候又能够正常访问别人服务器. 思路 最开始猜测是网络不稳定造成的,但是自己没有收集什么时候超时,什么时候能正常访问别人服务器的日志,搞网络 ...

  7. 程序中编写log日志

    public string logFile; ; private Stream s = null; StreamWriter sw = null; /// <summary> /// 用l ...

  8. 架构之高可用性(HA)集群(Keepalived)

    Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭 ...

  9. PCB布线要求

    时钟线要求 时钟驱动器布局在PCB中心而非电路板外围,布局尽量靠近,走线圆滑.短,非直角.非T形,布线可选4~8mil,过窄会导致高频信号衰减,并降低信号之间电容性耦合. 避免时钟之间.与信号之间的干 ...

  10. Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)

    一.Bean的Scope Scope描述的是Spring容器如何新建Bean实例的.Spring的Scope有以下几种,通过@Scope注解来实现. (1)Singleton:一个Spring容器中只 ...