2016-02-07 33 views
1

我有兩個包, pack1和pack2。在pack1中有 我有兩個類叫做Prog,另一個叫ClassA。 在pack2中我有一個叫做ClassB的類。來自不同包的調用方法JAVA

我想了解爲什麼我無法從ClassB中調用使用該對象的方法。 我可以做到這一點使用主類,但不能與其他類。

下面的代碼:

package pack1; 
import pack2.ClassB; 

public class Prog { 
    public static void main(String[] args){ 

    } 
} 

代碼ClassA的

package pack1; 
import pack2.ClassB; 

public class ClassA { 
    ClassB o3 = new ClassB(); 
    // Error won't compile 
    System.out.println(o3.getText()); 

} 

代碼ClassB的:

package pack2; 

public class ClassB { 
    final String TEXT = "This is a text"; 

    public String getText(){ 
     return TEXT; 
    } 
} 

回答

2

這裏的問題不在於你不能訪問方法。問題是語句必須包含在構造函數,方法聲明或初始化塊中。因此,這將是有效的代碼,例如:

enter codepackage pack1; 
import pack2.ClassB; 

public class ClassA { 
    ClassB o3 = new ClassB(); 

    public void someMethod(){ 
     System.out.println(o3.getText()); 
    } 
} 
+0

感謝您的答覆。但爲什麼它會這樣工作?在主類中,我不必將其放在構造函數中。 –

+0

@ reddit_10主類包含一個方法聲明,您的'ClassA'版本包含一個Statement(一個StatementExpression更精確),它不同於方法聲明。請看JLS(http://docs.oracle.com/javase/specs/jls/se8/html/index.html) - 本例中的第8.2和14.5章。 – Paul