java面向对象中四种权限(private,protected,public,友好型)详解
转自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 成员变量只能在类中访问而不能在其他类中访问。
例如:
- package Main;
- public class Private {
- private int a;
- private int b;
- Protected (){
- this.a=1;
- this.b=2;//a和b只能在Private类中调用
- }
- private void set(){
- System.out.println(""+a+""+b+"\n");
- }
- void Print(){
- this.set();//只能在这里用;
- }
- }
友好型和protected:
如果在另一个类中声明其他的一个类,如果这两个在一个包中那么另一个类能访问这个其他类的友好型变量不同包不能访问:
如果在另一个B类中声明其他的一个类A,如果这两个在一个包中那么另一个类B也能能访问这个其他类A的protected变量(或方法),如果不在一个包,那么如果类A有一个父类C如果,如果父类C中有一个protected变量(或方法),只要B,C在一个包中,B就能使用A中从父类继承的protected方法。如果A是B的子类,如果AB不在一个包中,那么A可以使用B中protected方法。
例如:
- package Main;
- import Protected.*;
- public class Main {
- public static void main(String args[]){
- Protected jkl=new Protected();
- jkl.Print();//调用jkl父类的protect方法
- Frindly prot =new Frindly();
- System.out.println(prot.a);//在Main类中调用友好型的变量
- prot.set();//在Main类中调用友好型的方法
- }
- }
- package Main;
- public class Frindly {
- int a,b,c,d;
- Frindly(){
- a=b=c=d=1;
- }
- void set (){
- System.out.print(""+a+" "+b+"\n");
- }
- }
- package Main;
- public class Protectedfather{
- protected int a;
- private int b;
- protected Protectedfather (){
- this.a=1;
- this.b=2;//a和b只能在Protected中调用
- }
- private void set(){
- System.out.println(""+a+""+b+"\n");
- }
- protected void Print(){
- this.set();//只能在这里用;
- }
- }
- package Protected;
- import Main.*;
- public class Protected extends Protectedfather{
- public Protected(){
- super();//在另一个包中调用里父类中的protect构造方法
- super.a=12;//调用父类的protect变量
- }
- }
Public:
如果类中的方法或者变量是public,那么就可以在别的类中调用,没有限制(用在夸包)。A带掉用别的包中的B类
- package Main;
- import Public.*;
- public class Main {
- public static void main(String args[]){
- int a;
- Public p=new Public();//调用public类中的public方法
- a=p.a;//调用Public类中的public变量
- p.set();
- }
- }
- package Public;
- public class Public {
- public int a=12;
- public void set (){
- System.out.println("OK\n");
- }
- }
总结表格::
|
同一类 |
同包 |
不同包 |
|||
|
子类 |
非子类 |
子类 |
非子类 |
||
|
Private |
是 |
否 |
否 |
否 |
否 |
|
友好型 |
是 |
是 |
是 |
否 |
否 |
|
Protected |
是 |
是 |
是 |
是 |
否 |
|
Public |
是 |
是 |
是 |
是 |
是 |
java面向对象中四种权限(private,protected,public,友好型)详解的更多相关文章
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- java中四种权限修饰符区别
总的概括:public > protected > (default) > private 细分见下表格: 权限修饰符 public protected (default) priv ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- js中几种实用的跨域方法原理详解
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- js中几种实用的跨域方法原理详解【转】
源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...
- 【转】js中几种实用的跨域方法原理详解
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- Linux中的特殊权限粘滞位(sticky bit)详解
Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...
- 【转】Linux中的特殊权限粘滞位(sticky bit)详解
Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...
- Java正则中为什么反斜线"\"需要用“\\\\”表示,原因详解。
首先,我们需要知道在java字符串和正则表达式中,“\”都具有特殊的含义. 一.在Java的字符串中"\"有两个功能 (一)代表特殊字符:\t代表制表符,\n代表换行....等. ...
随机推荐
- LeetCode(45)-Bulls and Cows
题目: You are playing the following Bulls and Cows game with your friend: You write down a number and ...
- 在线学习Java免费资源推荐
你想学习Java吗?来对地方了!这篇文章将会介绍很多高质量的免费资源,包括网页.论坛.电子书和速查表. Java是一种面向对象的编程语言,拥有独立.多线程.安全.动态和健壮的特点.归功于其多功能的特点 ...
- Tomcat中常见线程说明
http://blog.csdn.NET/jeff_fangji/article/details/41786205 本文讲述了Tomcat的常见线程的功能.名称.线程池和配置等信息,其中源码来自于To ...
- Hadoop基础知识串烧
 YARN资源调度: 三种 FIFO 大任务独占 一堆小任务独占 capacity 弹性分配 :计算任务较少时候可以利用全部的计算资源,当队列的任务多的时候会按照比例进行资源平衡. 容量保证:保证队 ...
- webstorm配置eslint【标记错误,修复错误】
项目中经常用到eslint语法,结合个人经验,用webstorm配置eslint "文件"->"默认设置"->"语言&框架&quo ...
- 我写的python代码的规则
1.Python文件的命名: 采用每个单词的首字母大写,不使用下划线 2.Python类的命名: 采用每个单词的首字母大写,不使用下划线 3.Python包名的命名:采用每个单词都是小写,不使用下划线 ...
- 自己用 Netty 实现一个简单的 RPC
目录: 需求 设计 实现 创建 maven 项目,导入 Netty 4.1.16. 项目目录结构 设计接口 提供者相关实现 消费者相关实现 测试结果 总结 源码地址:github 地址 前言 众所周知 ...
- flex调用JS报安全沙箱错误解决办法
flex调用JS方法弹窗时一般会报安全沙箱错误,只要将被调用的JS方法设置延时就可解决. function openKqQuery(){ window.showModalDialog("pa ...
- Java基础:Java虚拟机(JVM)
当我们第一次学习Java时这些原理上的东西就会被提到,但是很少有真正去学习.今天开始从头过一遍Java,打算从JVM开始. 1. JVM是什么 2. JRE和JDK 3. JVM结构 3.1. 程序计 ...
- Java并发之AQS详解
一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...