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代表换行....等. ...
随机推荐
- SpringBoot的第一个例子
1. 安装springboot的开发IDE,IntelliJ IDEA 2016.3.1这个工具,在IDE的官网上可以下载最新版本.https://www.jetbrains.com/idea/#ch ...
- 学习MQ(一) 感知
声明:我的文字里出现的MQ,如没有特殊指明,就是指的IBM的websphere MQ 以前对MQ一无所知! MQ是IBM websphere的系列产品之一,是很好的一个中间件产品.其实我对这列产品并不 ...
- OO开发思想:面向对象的开发方法(Object oriented,OO)
面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...
- HashMap与ConcurrentHashMap的测试报告
日期:2008-9-10 测试平台: CPU:Intel Pentium(R) 4 CPU 3.06G 内存:4G 操作系统:window server 2003 一.HashMap与Concurre ...
- 精彩源于起点——2018年潍坊市首次青少年Python编程公开课
有一种语言叫计算机语言 I want to talk with Computer 春遇到冬,有了岁月 天遇到地,有了永恒 我们拥有的, 不止是长大, 还有那份长大的悲欢经历. 未来会有很多可能, 但一 ...
- YOLO_Online 将深度学习最火的目标检测做成在线服务实战经验分享
YOLO_Online 将深度学习最火的目标检测做成在线服务 第一次接触 YOLO 这个目标检测项目的时候,我就在想,怎么样能够封装一下让普通人也能够体验深度学习最火的目标检测项目,不需要关注技术细节 ...
- Spring JTA multiple resource transactions in Tomcat with Atomikos example
http://www.byteslounge.com/tutorials/spring-jta-multiple-resource-transactions-in-tomcat-with-atomik ...
- 20岁少年小伙利用Python_SVM预测股票趋势月入十万!
在做数据预处理的时候,超额收益率是股票行业里的一个专有名词,指大于无风险投资的收益率,在我国无风险投资收益率即是银行定期存款. pycharm + anaconda3.6开发,涉及到的第三方库有p ...
- 洛谷 P1879 解题报告
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...
- JS——函数
一.函数的种类 1.无参函数 function showName() { alert("我是无参函数"); } 2.有参函数 在函数中的参数为"形式参数" 形式 ...