文档章节

Java--default详解

阿阿阿阿阿局
 阿阿阿阿阿局
发布于 2016/08/04 21:15
字数 594
阅读 18
收藏 2

下表为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修饰符,上述程序正常运行,结果如下:

 

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

© 著作权归作者所有

阿阿阿阿阿局
粉丝 12
博文 48
码字总数 61219
作品 0
成都
私信 提问
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
222
0
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
265
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
152
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
16分钟前
4
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
32分钟前
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
50分钟前
40
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
57分钟前
4
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部