浅谈java面向对象中四种权限
作者:在月牙上放歌 时间:2023-03-09 18:43:46
俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制。
Java中,可以通过一些Java关键字,来设置访问控制权限;
主要有 private(私有), package(包访问权限),protected(子类访问权限),public(公共访问权限)
在java里,这些语句都可以修饰类中的成员变量和方法,但是只有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 | 是 | 是 | 是 | 是 | 是 |
来源:http://blog.csdn.net/a1237871112/article/details/50926975
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android EditText限制输入字符的方法总结
![](https://img.aspxhome.com/file/2023/6/92606_0s.png)
C#中使用IrisSkin2.dll美化WinForm程序界面的方法
![](https://img.aspxhome.com/file/2023/1/129611_0s.gif)
算法练习之从String.indexOf的模拟实现开始
C#如何给新建的winform程序添加资源文件夹Resources
![](https://img.aspxhome.com/file/2023/6/125986_0s.png)
Spring Boot @Conditional注解用法示例介绍
Android中把bitmap存成BMP格式图片的方法
Android开发input问题解决分析
c# 用Dictionary实现日志数据批量插入
ajaxFileUpload插件,C#返回Json数据报错问题的解决方案
![](https://img.aspxhome.com/file/2023/0/91360_0s.png)
Android实现APP秒表功能
![](https://img.aspxhome.com/file/2023/8/95988_0s.jpg)
C#读取csv格式文件的方法
C#使用伪随机数实现加密用户密码的方法
spring-boot使用AOP统一处理日志
![](https://img.aspxhome.com/file/2023/6/77056_0s.jpg)
SpringbootJPA分页 PageRequest过时的替代方法
![](https://img.aspxhome.com/file/2023/1/68001_0s.png)
Java实现JDK动态代理的原理详解
![](https://img.aspxhome.com/file/2023/1/69291_0s.png)
Java的StringBuilder在高性能场景下的正确用法
Android沉浸式状态栏微技巧(带你真正理解沉浸式模式)
![](https://img.aspxhome.com/file/2023/6/137456_0s.png)
springboot多模块化整合mybatis,mapper自动注入失败问题及解决
![](https://img.aspxhome.com/file/2023/8/60778_0s.jpg)
解析StreamReader与文件乱码问题的解决方法
![](https://img.aspxhome.com/file/2023/2/129702_0s.jpg)
C# 中对象序列化XML的方法
![](https://img.aspxhome.com/file/2023/5/82215_0s.png)