作者H45 (!H45)
看板java
标题Re: [问题] access modifier的问题
时间Sun Apr 29 14:35:43 2007
※ 引述《id9455 (Pony)》之铭言:
: 最近在测试 Java 的 Access Modifier
: (public, protected, private, none)
: 在编译的时候发生了一件诡异的事情
: 先附上程式码:
: ==Array.java==
: package simple;
: class Array {
: public Array() {
: System.out.println( "simple.Array");
: }
: }
: ==List.java==
: package simple;
: public class List {
: Array a = new Array();
^^^^^^^^^^^^^^^^^^^^^^
: public Array b = new Array();
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这样的写法会有问题,最好不要在宣告 member field 的同时指定不是常数的初值
改成以下写法应该不会有问题:
package simple;
public class List {
Array a;
public Array b;
public List() {
a = new Array();
b = new Array();
System.out.println( "com.bruceeckel.util.List");
}
}
至於为何原来的程式码会出问题,可能就得等其他人来回答了
: public List(){
: System.out.println( "com.bruceeckel.util.List");
: }
: }
: ==TestLib.java==
: import simple.*;
: public class TestLib {
: public static void main(String[] args) {
: // Array is not public accessible.
: // Array a = new Array();
: List l = new List();
: // cannot access a since it’s in package scope
: // System.out.println(l.a);
: System.out.println(l.b);
: }
: }
: 假设目前的路径是 d:\java\id9455\simple
: Array.java 和 List.java 放在 d:\java\id9455\simple
: TestLib.java 放在 d:\java\id9455
: 问题来了
: 在编译的时候
: 如果在 d:\java\id9455\simple 下 javac *.java
: 可以正常编译
: 但如果是:先编译 Array.java,再编译 List.java
: 却会发生找不到 Array 这个 Class 的问题
: 根据我对 none 这个 access modifier 的认识
: 他应该要能够让在同一个 Package 里其他的Class 存取
: 但错误讯息却找不到这个Class
: 请问一下这是为什麽呢 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.205.85