转自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. How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub

    How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub (我是如何拒绝微软30w的诱惑,专注于GitHub事业) 当我老 ...

  2. 一种WPF在后台线程更新UI界面的简便方法

    WPF框架规定只有UI线程(主线程)可以更新界面,所有其他后台线程无法直接更新界面.幸好,WPF提供的SynchronizationContext类以及C#的Lambda表达式提供了一种方便的解决方法 ...

  3. css中bfc和ifc

    bfc定义:块级格式化上下文,他是一个独立的渲染区域,他规定了这个内部如何布局,并且与这个区域的外部毫不相干.BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置.Box垂直方向的距离由mar ...

  4. MQ队列管理器搭建(二)

    MQ级联方式使用场景 使用场景:     如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介.上图中,Application1与Applica ...

  5. javascript简单介绍(二)

    晨读单词: onmouseover:鼠标移入 onmouseout:鼠标移出 attribute:属性 node:节点 document:文档 element:元素 textNode:文本节点 app ...

  6. Flask-email 发送邮件的配置,发送附件的方法,以及os.environ.get('MAIL_USERNAME')为None的解决办法

    一.发送邮件的配置 在学习flask-mail来发送电子邮件的时候遇到了一些问题,其实都是些小问题,现在记录下来以便于以后查看. 1.首先flask-mail的安装 pip install flask ...

  7. 万水千山ABP - 单租户时,成功保存数据后,数据不显示

    问题描述: ABP 禁用了多租户,在编辑一个实体记录后,能成功地保存数据,但数据列表中看不到这条记录.打开数据表查看,发现该实体记录的 TenantId 字段值成了 Null , 而不是预期的默认租户 ...

  8. python单线程,多线程和协程速度对比

    在某些应用场景下,想要提高python的并发能力,可以使用多线程,或者协程.比如网络爬虫,数据库操作等一些IO密集型的操作.下面对比python单线程,多线程和协程在网络爬虫场景下的速度. 一,单线程 ...

  9. ZAB协议(Zookeeper atomic Broadcast)

    一.简语: ZAB协议是Paxos算法的经典实现 二.ZAB协议的两种模式: 崩溃恢复: 1.每个server都有一张选票(myid,zxid),选票投给自己 2.收集所有server的投票 3.比较 ...

  10. Bootstrap在线引用css和js

    百度在线调用 <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></ ...