Re: [問題] access modifier的問題
※ 引述《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
討論串 (同標題文章)