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代表换行....等. ...
随机推荐
- 用shell脚本挂载linux主机拷贝相应文件
#!/bin/sh TARGETIP=192.168.88.3 #这里是你要挂在的ftp服务器的IP地址 MOUNTDIR=/mnt TARGETDIR=/root/Desktop/Work ERRO ...
- 软件开发顶尖高手的杀手锏SQL语句
软件开发顶尖高手的杀手锏SQL语句 ...
- 【模板】最近公共祖先(LCA)
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- angular4 ionic3 app
对于angular系列来说,从2到4仅仅是版本号的变更,绝大部分都是兼容的. 如果按照规范编写代码,一般来说是没有问题的. 学习angular4 快速入门参考 https://www.an ...
- win8 JDK环境变量不生效
执行where java 看一下路径对不对,如果对的话就把system32下面的3个java相关的exe删了即可,如果路径不对就修改环境变量.
- EF中关于TransactionScope的使用
前提条件 TransactionScope类需要引用System.Transactions; 数据库环境及需求 现在假设有两个表如图: ...
- Codeforces Round #479 (Div. 3) A. Wrong Subtraction
题目网址:http://codeforces.com/contest/977/problem/A 题解:给你一个数n,进行k次变换,从末尾开始-1,512变成511,511变成510,510会把0消掉 ...
- C++中,用类和重载运算符写高精模板
先放代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; s ...
- 如何在python脚本开发做code review
在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...
- C#语言中的XmlSerializer类的XmlSerializer.Deserialize (Stream)方法举例详解
包含由指定的 XML 文档反序列化 Stream. 命名空间: System.Xml.Serialization程序集: System.Xml(位于 System.Xml.dll) 注意: 反序 ...