类的包访问权限:《Java编程思想》中一段话的困惑
类的包访问权限:《Java编程思想》中一段话的困惑
在《java编程思想第三版》(陈昊鹏 饶若楠等译)的第五章隐藏具体实现中,5.4节的最后一段话是:
“正如前面所提到的,如果没能为类访问权限指定一个访问修饰符,它就会缺省得到包访问权限。这意味着该类的对象可以由包内任何其他类来创建,但包外则是不行的。(一定要记住,相同目录下的所有不具有明确package声明的文件,都被视作是该目录下缺省包的一部分。)然而,如果该类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员,尽管他们并不能生成该类的对象。”
刚开始我对最后一句话的理解是:如果某个类没有指定访问修饰符,但其中有static成员是public的话,在包外的类中仍然可以调用该类的static的public方法或访问static的public成员字段。
于是我做了下面的实验:(我的classpath没有设置,是默认值,即是当前路径;我CMD的当前路径Thinking in java。)
在Thinking in java\chapter5\下有Test.java,代码如下
package chapter5;
class Test
{
public static int i=0;
public static void print()
{
System.out.println("class Test public static procedure");
}
public void println()
{
System.out.println("class Test public procedure");
}
}
在Thinking in java\下有Test1.java,代码如下
import chapter5.*;
public class Test1
{
public static void main(String[] args)
{
int a;
a=Test.i;
//Test.print();
}
}
接着,编译Test1.java,结果编译器报错,说Test类不是公开类,不可以调用其方法或访问其成员字段。
结论:
1、《Java编程思想》那段话应该是错误的,至少说应该是有歧义的。(手上没有英文原版,所以原版是怎么描述的,不大清楚)
2、具有包访问权限的类,包外的类是不可以调用,无论是一般的方法、字段,还是静态方法及字段。
3、具有包访问权限的类,其成员声明为public和protected是没有意义的,因为在包外不能访问也
相关文档:
List的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
之前51CTO曾发过一篇文章叫做《OSGi为什么重要:向模块化转移的主攻手
》,里面对于OSGi的优势进行了分析。不过,对于
究竟什么是OSGi,很多人仍然只有一个模糊的概念。本系列(你好,OSGi
)从基础开
始介绍了OSGi。本部分介绍OSGi是什么,以及OSGi容器的一些现状。(注:本文英文原文于08年3月发布在JavaWorld网站)
......
面试中遇到的问题,大家共同学习!!
Java工厂模式
Java工厂模式看了这么多关于工厂模式的讲解,还是觉得这篇文章讲的好理解,贴出来和大家分享分享。
一、引子
话说十年前,有一个****户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,****户坐车时总是怪怪的:上Benz车后 ......