Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性
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不可见
}
}
Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性的更多相关文章
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- java学习笔记12(final ,static修饰符)
final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...
- private ,friendly,public protected四种修饰符访问权限(从idea代码提示中看出)
文件一,本类中可以访问全部: package xsf; /** * Created by liwenj on 2017/7/25. */ public class A { private int x= ...
- Java学习笔记四:三目运算符与字符串连接符等
一 .三目运算符与自增自减 GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/OperPrac02.java 条件运算符由 ...
- Java基础笔记(7)----三个修饰符
abstract抽象 方法 抽象方法:abstract修饰的方法,只有声明 而没有方法的实现(连{}都没有). 语法:修饰符 返回值类型 方法名(形参列表); 注意:抽象方法 必须定义在 抽象类中. ...
- angularjs学习笔记3-directive中scope的绑定修饰符
在angularjs中,一个directive返回一个对象,对象存在很多属性,并且可以在directive中自定义自己的scope,而使用自己的scope是为了防止一个directive被使用在多个地 ...
- 菜鸟笔记 -- Chapter 6.2.1 权限修饰符
6.2.1 权限修饰符 面向对象的三大特性就有封装,封装隐藏了对象的属性和实现细节,仅对外提供公共访问方式,而这个访问方式就是由权限修饰符控制的.Java中的权限修饰符主要包括private.pub ...
- java学习笔记(2)注释、public lcass、class、标识符、字面值、变量
java学习笔记(1)中说过了java的一些基础知识,发展史,特点,编译和运行过程,配置环境变量等,接下来开始介绍java的语法等只是点 关于java源程序中的注释: *什么是注释?注释的作用是什么 ...
- java 修饰符的作用一(public protected default private 组)
1.public protected default private 组 public 权限最大,同类,同包,不同包,同包子类父类之间,不同包子类父类之间都可以访问. java 默认的权限是defau ...
随机推荐
- js中数组的操作方法
今天给大家带来一篇有关数组操作方法的文章. 新建数组 方法一:通过new运算符创建一个数组构造函数. var arr = new Array(); 方法二:通过方括号直接创建直接量数组. var ar ...
- 关于开发环境无法运行applet
测试一下IE java vm 如果没有正确显示出来,说明java vm插件没有装好: 我用Uninstalle 来清理注册表:重装jdk 1.6_45
- laravel 表单接收
POST方式接收 视图层 <form action="/submit" method="post"> {{csrf_field()}} //必 ...
- 同一个Activity先后加载2个Layout,从layout1取值传入layout2
同一个Activity先后加载2个Layout,从layout1取值传入layout2 没啥技术含量,就权当丰富下mono for android的小代码. Main.xaml <?xml ve ...
- (转)Mysql占用过高CPU时的优化手段
Mysql占用CPU过高的时候,该从哪些方面下手进行优化?占用CPU过高,可以做如下考虑:1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processli ...
- spring boot快速入门 7: 使用aop处理请求
样例:登陆拦截(aop简单样例) 第一步:在pom 文件中加入aop依赖 <!-- spring aop --> <dependency> <groupId>org ...
- JavaScript数据结构-19.拓扑排序
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 安装Postgresql之后,创建用户 配置rails
登录 sudo su - postgres psql 1 创建Postgresql新用户,devpg是用户名,密码也是devpg, 不是超级管理员,拥有创建数据库权限,登录权限,继承拥有角色权限 cr ...
- MySQL的连接方式
连接MySQL操作是连接进程和MySQL数据库实例进行通信.从开发的角度来说,本质上是进程通信.常用的进程通信方式有管道.命名管道.命名字.TCP/IP套接字.Unix域名套接字.MySQL提供的连接 ...
- JVM的监控命令
JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...