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代表换行....等. ...
随机推荐
- javascript中的instanceof运算符
instanceof运算符希望左操作数是一个对象,右操作数表示对象的类:如果左侧的对象是右侧类的实例,则返回true,否则返回false.由于js中对象的类是通过初始化它们的构造函数来定义的,因此in ...
- java main方法执行sql语句
public static void main(String[] args) throws Exception{ String driver = "oracle.jdbc.driver.Or ...
- Read程序员的困境有感
看完这篇文章,我真的害怕了,码农遍地都是,我就是,改变从今天做起,不走码农生活 首先, 打造你自己的私人项目.你需要不断地打磨自己的技艺.如果工作本身并不能帮助你做到这一点,就捡起那些你感兴趣的问题, ...
- CAN数据格式-ASC
Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC. 1. ASC定义 ASC(ASCII)即文本文件,数据已可视化的文本存储. 2.ASC查看 通常情况下,用记事本就可以打开. ...
- JavaScript中对象数组,如何给对象添加一个新属性
var a =[{name: 'Tom',age:20},{name: 'Tom2',age:22}] 现在给a数组中的第一个对象添加性别属性 a[0]['gender']='women' a[0][ ...
- AngularJs 学习笔记(一)作用域
AngularJs采用了注重时效的MVC方式,是基于MVW模式. 1.$scope和作用域的概念. AngularJs中的$scope对象是模板的域模型,也称作作用域实例,通过为其属性赋值,可以传递给 ...
- 线上Django项目python2到3升级日记
这两天干了一个几斤疯狂的事情,花不到一个工作日的时间把一个线上Django项目语言版本从python2升级到Python31.字典的一个语法变化 Python2.7: if dict1.haskey( ...
- 0基础一分钟入门Python
这篇文章面向所有想学python的小伙伴(甚至你从没听过编程),这篇文章将会带你以最快的速度入门python.赶快上车,时间来不及了... 一,下载和安装python 1.下载: 1.1 python ...
- Jmeter(二十七)_Beanshell保存响应内容到本地
利用Jmeter-BeanShell PostProcessor可以提取响应结果并保存到本地文件,这种操作在jmeter做爬虫时非常有用,可以帮助你迅速的获取想要的内容到本地文件! 1:在本地新建一个 ...
- form表单序列化为Jquery对象
<form id="DailyFinancial" > @*class="form-inline"*@ <div class="fo ...