Java中关于成员变量访问权限问题一般书中会给出如下表格:

                      

简单地描述一下表中的内容:用private 修饰的成员变量只能在类内部访问;用default修饰的成员变量可以再内部访问,也可以被同个包(同一目录)中的类访问;default修饰的成员变量既可以在类内部访问,又可以被同个包中的类访问,还能被子类访问;public可以被任何地方的类访问。

  我们可以用隐私程度来表示各种修饰符的权限,即:private > default > protected > public。private 、 protected 、public我们先不讨论其访问,我们着重讨论default的访问权限。在定义类的成员变量时,不用default去修饰成员变量,即是说,如果没有修饰符Java就将它默认是default类型的成员变量,如:int age; 。如果加了default则编译时会报错。按照以上说法,default型的成员变量是不能够在子类中被访问的,但是,事实上是不是如此呢?其实不然,这里缺少了一个限制条件,那就是子类和父类不在同一包中时,default型的成员变量是不能够在子类中被访问。即是说,如果子类和父类在同一包中,那么父类的default型的成员变量是能够被子类访问的。我们来举个例子:文件名是:Inherite.java

class Person{

  String name;
  protected int age;
}

class Student extends Person{
  String school;
  double score;
}

public class Inherite {
  public static void main (String [] argv ){
    Student S = new Student ();
    S.name = "卓增泗";
    S.school = "交通大学";
    S.age = 24;
    S.score = 95.5;
    System.out.println("我是" + S.name + ",今年" + S.age + "岁,毕业于" + S.school + ",平均成绩是:" + S.score);
   }
}

最终的结果是:

    

  这个结果说明,子类是可以访问父类的default型的成员变量的。但是,当它们不在同一包中呢?我们再举一个例子:文件名1:Person.java  文件名2:Inherite1.java

//文件1:Person.java

package heri;

public class Person {
  String name;
  public int age;
}

这个文件编译后*.class文件位于heri文件夹中,编译命令为:javac -d . Person.java

//文件名:Inherite1.java

class Student extends Person{
  String school;
  double score;
}

public class Inherite1 {
  public static void main (String [] argv ) {
    Student S = new Student ();
    S.name = "卓增泗";
    S.school = "交通大学";
    S.age = 24;
    S.score = 95.5;
    System.out.println("我是" + S.name + ",今年" + S.age + "岁,毕业于" + S.school + ",平均成绩是:" + S.score);
  }
}

最终结果为:

      

可知,编译出现了两个错误,即是default型的成员变量。

  那么如何来解释这一现象呢?前面说过,因为隐私程度default高于protected,所以在同一包中时,子类也是一种类,这样子类就被视为是同一包中的类,这样的话子类就具有default的访问权限了。当不在同一包中时,子类就没有default的访问权限了。

Java 中关于default 访问权限的讨论的更多相关文章

  1. Java中四种访问权限总结

    一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...

  2. Java中protected方法访问权限的问题

    先看Test.java 此时出现上文提到的错误:The method clone from the type Object is not visiuable. 我们已经清楚Object.clone() ...

  3. C++中protected的访问权限

    关于C++中protected的访问权限的讨论已经是一个很陈旧的话题了,陈旧到大家都不愿意去讨论,觉得他见到到吃饭睡觉那么自然. 我再次读<C++ Primer>的时候,其中关于prote ...

  4. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  5. Java之封装与访问权限控制(一)

    目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...

  6. angularjs中的页面访问权限设置

    11月在赶一个项目,这阵子比较忙,挤挤时间更一篇博客吧,如标题所述说说在ng中页面访问权限控制的问题,水平有限各位看官见谅: 在以往的项目中,前后端常见的配合方式是前端提供页面和ui加一点DuangD ...

  7. Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)

    在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...

  8. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

  9. java与c++的访问权限的问题

    转自网络:http://blog.sina.com.cn/s/blog_4bc954d30100wtxe.html 权限的理解重要理解什么是可见什么是不可见 首先声明:java中,friendly这个 ...

随机推荐

  1. springboot 不使用前端模板直接跳转页面

    1.创建springboot项目 2.在resource 下创建pages文件夹,存放所有页面 3.编写后台代码 4.访问http://localhost:8080/index,即可跳转到页面

  2. 【Codeforces 276C】Little Girl and Maximum Sum

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最后的和. 其实可以看成是 ∑bi*ai 的形式. 这里的bi这个系数表示的是有多少个区间覆盖了ai这个元素. 既然这样的话. 那么 ...

  3. Emgu cv人脸检测识别

    Emgu cv人脸检测识别 1.开发平台:WIN10 X64    VS2012    Emgucv版本:3.1 2.先给大家分享一个官网给的示例源代码: https://ncu.dl.sourcef ...

  4. MyBatis-Spring-SqlSessionFactoryBean(转)

    SqlSessionFactoryBean 在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建.而在 MyBatis-Spring 中 ...

  5. jquery-Kendo框架

    从github上下载的包是完整的,可以根据readme.md上的步骤来操作 从官网下的那个包不是完整的,里面没有例子,只有源文件

  6. spring是怎样管理mybatis的及注入mybatis mapper bean的

    1.spring启动mybatis的两个重要类:SqlSessionFactoryBean和MapperFactoryBean,这两个类都是org.mybatis.spring jar包的. 是用来启 ...

  7. c# DataTable to Object Mapping

    public static class DataTableExtensions { public static IList<T> ToList<T>(this DataTabl ...

  8. zzulioj--1769--去师院的旅程:能怎么走(三)(0.0)

    1796: 去师院的旅程:能怎么走(三) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 404  Solved: 200 SubmitStatusWe ...

  9. isual Studio 2013编译ImageMagick---转

    “该文引用自 CruiseYoung的:Visual Studio 2013编译ImageMagick http://blog.csdn.net/fksec/article/details/36008 ...

  10. Java-MyBatis:MyBatis 3 | SQL 语句构建器类

    ylbtech-Java-MyBatis:MyBatis 3 | SQL 语句构建器类 1.返回顶部 1. SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL ...