2016-02-07 3 views
1

У меня есть два пакета; pack1 и pack2. в pack1 У меня есть два класса: основной называется Prog, а другой - ClassA. В пакете2 у меня есть класс 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

Проблема здесь не то, что вы не можете получить доступ к методу , Проблема состоит в том, что инструкции должны быть заключены либо в конструктор, либо в adode-объявление, либо в блок инициализатора. Так что это будет действительный код, например:

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 mainclass содержит декларацию метода, ваша версия 'ClassA' содержит инструкцию (более точное выражение StatementExpression), которое отличается от декларации метода. Взгляните на JLS (http://docs.oracle.com/javase/specs/jls/se8/html/index.html) - глава 8.2 и 14.5 в этом случае. – Paul

Смежные вопросы