Java修饰符类型(public,protected,private,friendly)

public的类、类属变量及方法,包内及包外的任何类均可以访问;
protected的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问;
private的类、类属变量及方法,包内包外的任何类均不能访问;
如果一个类、类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的任何类都可以访问它,而包外的任何类都不能访问它(包括包外继承了此类的子类),因此,这种类、类属变量及方法对包内的其他类是友好的,开放的,而对包外的其他类是关闭的。

从开放性来说,public > protected > package > private 。  其中 package修饰符就是默认修饰符,也就是缺省修饰符情况下的修饰符,实际中package 修饰符不能写出。

示例:

在同一工程中,在 src 包中定义 Modifier类 (且在Modifier类文件中定义默认修饰符类DefaultClass类),Modifier类的子类ModifierSub类,SamePackageTestModifier类;在另一个包 mvc.circle 包中,定义DifferentPackageTestModifierSub类,DifferentPackageTestModifier类,其中的函数和类的可见性如下所示:

-- src/Modifier.java文件

package src;

public class Modifier {
public void methodPublic(){
System.out.println("这是Public方法");
}
protected void methodProtected(){
System.out.println("这是Protected方法");
}
void methodDefault(){
System.out.println("这是Default方法");
}
private void methodPrivate(){
System.out.println("这是Private方法");
} public void doTest(){
DefaultClass aClass=new DefaultClass();
aClass.methodPublic(); //同一包中,DefaultClass类的Public方法可见
aClass.methodProtected();//同一包中,DefaultClass类的Protected方法可见
aClass.methodDefault(); //同一包中,DefaultClass类的Default方法可见
//同一包中,DefaultClass类的Private方法不可见
}
} class DefaultClass{
public void methodPublic(){
System.out.println("这是Default类的Public方法");
}
protected void methodProtected(){
System.out.println("这是Default类的Protected方法");
}
void methodDefault(){
System.out.println("这是Default类的Default方法");
}
private void methodPrivate(){
System.out.println("这是Default类的private方法");
}
}

-- src/ModifierSub.java 文件

package src;

public class ModifierSub extends Modifier {
public void doTest(){
methodPublic(); //子类中,父类Public方法可见
methodProtected();//子类中,父类Protected方法可见
methodDefault();//子类中,父类Default方法可见
//子类中,父类Private方法不可见 //测试默认修饰符的类
DefaultClass aClass=new DefaultClass();//同一包中,默认修饰符的类可见
aClass.methodPublic(); //同一包中,默认修饰符的类的Public方法可见
aClass.methodProtected();//同一包中,默认修饰符的类的Protected方法可见
aClass.methodDefault(); //同一包中,默认修饰符的类的Default方法可见
//同一包中,默认修饰符的类的Private方法不可见
}
}

-- src/SamePackageTestModifier.java文件

package src;

public class SamePackageTestModifier {
Modifier Modifier=new Modifier();
public void doTest(){
Modifier.methodPublic(); //同一包中,Public 方法可见
Modifier.methodProtected();//同一包中,Protected方法可见
Modifier.methodDefault(); //同一包中,Default方法可见
//同一包中,Private方法不可见
//同一包中,DefaultClass类可见
DefaultClass aClass=new DefaultClass();
aClass.methodPublic(); //同一包中,DefaultClass类的Public方法可见
aClass.methodProtected();//同一包中,DefaultClass类的Protected方法可见
aClass.methodDefault(); //同一包中,DefaultClas类的Default方法可见
//同一包中,DefaultClass类的Private方法不可见
}
}

-- mvc/circle/DifferentPackageTestModifierSub.java文件

package mvc.circle;

import src.Modifier;

public class DifferentPackageTestModiferSub extends Modifier {
public void doTest(){
methodPublic(); //不同包的子类中,Public方法可见
methodProtected(); //不同包的子类中,Protected方法可见
//不同包的子类中,Default方法不可见
//不同包子类中,DefaultClass不可见
}
}

-- mvc/circle/DifferentPackageTestModifier.java 文件

package mvc.circle;

import src.Modifier;

public class DifferentPackageTestModifer {
Modifier modifier;
public void doTest(){
modifier=new Modifier();
modifier.methodPublic(); //不同的包中,只有Public方法可见 //不同包中,DefaultClass不可见
}
}

最新文章

  1. Beta版本冲刺总汇
  2. kali 安装ss代理客户端的方法(纯属个人总结)
  3. UEFI+GPT引导实践篇(一):切换到UEFI启动,准备安装介质
  4. ejb 远程调用
  5. php 简单说明IoC (php 实例+注释)
  6. Mysql varchar大小长度问题介绍
  7. android开发隐藏了actionbar仍然短暂闪现的解决方法
  8. nodejs的安装和使用
  9. MVC实现SSO
  10. Experience of Python Learning Week 1
  11. Andriod的国际化-android学习之旅(五十八)
  12. pytest生成测试报告-4种方法
  13. 记录C#常用的代码片段
  14. java 有序数组合并
  15. PHP中stdClass的意义
  16. NLP-训练个model出来写诗
  17. Java Socket 实现HTTP服务器核心
  18. spring boot使用自定义配置的线程池执行Async异步任务
  19. MyBatis缓存通俗易懂
  20. JavaScript组合模式---引入

热门文章

  1. java开发注解大全
  2. SSAS Tabular模式中关系设置不支持直接设置多对多?
  3. request.getSession(true/false)的区别
  4. 【性能测试】:对WebSphere中间件的监控方式
  5. 【性能压测】:MQ队列异步处理机制导致的系统无法接受请求的问题
  6. 在Azuer创建自己的Linux_VM
  7. 20190415 OSX系统安装和配置maven
  8. Mac下配置idea(Mac 10.12)
  9. Java Web入门学习(二) Eclipse的配置
  10. Java网络编程(一)