下表为Java访问控制符的含义和使用情况

类内部

本包

子类

外部包

public

protected

×

default

×

×

private

×

×

×

通过此表一目了然。

public:Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。

private:Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

protected:介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

相信public、protected、private大家都特别清楚,现在主要通过反射机制来验证下default。

先定义一个抽象类FourModifier,如下:

package com.common.fourmodifier;

//没有访问控制符修饰,

abstract class FourModifier {

private int age;

//default

String name;

}

然后定义一个SubFourModifier类继承FourModifier,并位于同一个package下,如下

package com.common.fourmodifier;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

//与父类在同一个package下

public class SubFourModifier extends FourModifier{

public static void main(String[] args) {

System.out.println("类修饰符:"+Modifier.toString(FourModifier.class.getModifiers()));

//反射获取所有声明成员变量(包括私有)

Field[] field = FourModifier.class.getDeclaredFields();

for(Field f:field){

if("".equals(Modifier.toString(f.getModifiers()))){

System.out.println("field:default "+f.getName());//缺省情况下默认为default,所以获取修饰符为""

}else{

System.out.println("field:"+Modifier.toString(f.getModifiers())+" "+f.getName());

}

}

}

}

运行结果如下:

或许现在你会觉得可以在子类访问分类的default成员变量,错!

那么现在试试新建一个package,并在此package下新建一个类继承FourModifier,如下:

由于粘代码不能显示错误,直接上图,你会发现直接编译报错,因为FourModifier类没有声明访问控制类型,默认为default,而default只能在同一个package下访问类成员变量,无论是不是子类。

若FourModifier类加上public修饰符,上述程序正常运行,结果如下:

每日一语:多思考多总结。

java default string_Java--default详解相关推荐

  1. Java之toString()方法详解

    Java之toString()方法详解 Java中 toString()方法在Object类中和Intent类中都有定义,作用类似,但显示形式有点区别 一.Object类中toString()方法 t ...

  2. Java开发环境搭建详解

    Java开发环境搭建详解  http://topic.csdn.net/u/20110829/13/BF4FAA45-3E1A-48A8-BC46-0405B7F862A2.html 一.jdk安装与 ...

  3. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  4. java -jar 和 -cp详解

    java -jar 和 -cp详解 命令行执行程序 假如我们有一个程序,把它打包成Test.jar,如何运行才能成功输出Hello World package com.test; public cla ...

  5. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

  6. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  7. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  8. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  9. java定时任务框架elasticjob详解

    这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...

  10. Java RMI远程方法调用详解

    Java RMI远程方法调用详解     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51992182 一.Java R ...

最新文章

  1. git 裁切_裁切参数设计(DOE试验)
  2. 时间的玫瑰+但斌的投资思维
  3. fail-fast(快速失败/报错机制)-ConcurrentModificationException
  4. html语言可以写模版继承吗,16-Django的模板语言(变量,标签,过滤器,继承,html转义)...
  5. 【Luogu】P1383高级打字机
  6. 前端学习(95):ps基本操作与图片格式
  7. mysql 提交乱码问题_mysql数据库乱码问题
  8. linux下limits.conf 修改不生效的原因
  9. .Net中消除Dll中的dependency
  10. 微信弹出遮罩层引导用户浏览器打开升级版
  11. java 控制随机概率_【功能实现】实现设置概率的随机数
  12. 网站站内seo优化简介
  13. 数据结构(10)广义表的介绍与代码实现(c语言)
  14. 售前工程师与售后工程师
  15. API Promise化
  16. 笑死人不偿命的程序员内涵段子
  17. tooth的用法_关于tooth的用法总结大全
  18. session 超时时间设置
  19. Capabilities
  20. 微软mta国际认证的python编程考试_易讯教育将于8月推出微软MTA国际认证98-381:Python编程应用考试...

热门文章

  1. Hybrid APP 架构设计思路
  2. 限流之滑动窗口算法实战
  3. 通过JS控制页面不跟随系统文本、应用比例缩放
  4. 驱动开发:探索DRIVER_OBJECT驱动对象
  5. 【聆听】汪国真诗集(二)
  6. 深蹲不必天天做,天天做深蹲对于膝盖损伤有一定的影响,可以深蹲一天休息2天,但是贵在坚持!
  7. java四大作用域_java的四大作用域是什么?
  8. 数字时代,中国1436家农商行的业务困局和破局之道
  9. 走廊上的相机安装及调试方法
  10. SpringCloud集群的搭建,分布式的实现,负载均衡的几种方式,路由,页面监听