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 ...
随机推荐
- 使用Vue写一个登陆页面并在管理页面查看和修改
注册页面代码如下html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 蓝桥杯-正则问题(dfs,解决()的计算)
历届试题 正则问题 时间限制:1.0s 内存限制:256.0MB 问题描述 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式. 小明想求出这个正则表达式能接受的最长 ...
- python怎么解决用matplotlib画图时无法显示中文的问题或者出现方框的问题
在中文前面加上u 加上u以后如果还不可以显示中文显示了方框 就直接加上 from pylab import mpl mpl.rcParams['font.sans-serif']=['SimHei']
- C# string 特殊的引用类型
.Net 框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串.(译注:注意这里的“直接继承”.直接继承 ...
- php在单个文件内开启dbug
1.在文件开头添加如下代码 ini_set('display_errors', true); error_reporting(E_ALL);
- Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. 调用函数约定不同
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is ...
- OGNL取Map,List,Set的值
用到的类有: 相应代码: public class Dog { private String name; public Dog(){ } public Dog(String name){ this.n ...
- Ubuntu14.04下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)(在线或离线)
第一步: Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一) 第二步: Cloudera Manager安装之时间服务器和时间客户端(Ub ...
- Mysql5.7 半同步改进
Mysql5.6半同步策略 Mysql 5.6在半同步的时候,采用的是After Commit策略.即在主库上commit了之后,等待从库返回确认. 在这里,首先会出现幻读的问题,即当前连接的事务读取 ...
- 使用Java发送Http请求的内容
公司要将自己的产品封装一个WebService平台,所以最近开始学习使用Java发送Http请求的内容.这一块之前用PHP的时候写的也比较多,从用最基本的Socket和使用第三方插件都用过. 学习了J ...