2015-03-26 8 views
-1

Предположим, у меня есть 3 класса; A, B и C. Класс A и B находятся в одной упаковке. C находится в другом пакете. B имеет публичную функцию, которая возвращает логическое значение.Java, как получить ссылку на объект

Объект B создан в классе A, и он может вызывать функции класса B. Но проблема в том, что в классе CI требуется иметь ссылку на объект класса B, созданный классом A, я не хочу создайте еще один объект класса B в классе C. Как я могу это получить.

Пример: Класс В и класса А находятся в одном пакете

B.java

class B 
{ 
    public boolean fun() 
    { 
      returns boolValue; 
    } 
} 

A.java

class A 
{ 
    B b = new B(); //Creates object of Class B and can access function. 
} 

Класс C находится в другом пакете, и другой проект тоже.

C.java

class C 
{ 
    //How to get the reference of Class B object created in Class A? 
} 

После того, как я получаю ссылку на что я буду называть функции класса В, чтобы получить значения. Я попытался написать некоторый get(), который возвращает объект класса B, но для вызова этой функции у меня должен быть объект. Но я не знаю, как это сделать. Это может быть легко, но я новичок в java, и я не знаю, как это сделать. Пожалуйста, помогите мне решить эту проблему.

** UPDATE: Я не могу создать объект класса А в класс C :(**

+3

Сделать 'public B getB()' метод в классе 'A', который вернет' b'. – Kayaman

+3

* «B имеет публичную функцию, которая возвращает логическое значение» * Неверно, 'fun()' не является общедоступным (* метод * более корректен в языке Java), он является закрытым пакетом. – m0skit0

+0

@kayaman: Но как вызвать 'getB()' У меня нет ссылки на объект класса А. :( – Thushi

ответ

0

Make класса А общественные

publi class A { 

     private static B b = new B(); //Creates object of Class B and can access function. 

     public static B getB() { 
      return b; 
      } 
     } 

      class C 
      { 
       //I want to get the reference of Class B object created in Class A....But How??? :(
      B b = A.getB(); //if it works ???? 
      } 
+0

Я не хочу создайте объект класса А также :( – Thushi

+0

@Thushi, тогда статическая функция поможет? Редактировано. –

+0

@Thushi Почему бы и нет, что не так с этим? – WonderWorld

0

Классы A и B должны быть публичными и класса A потребности предоставить общественности аксессор в нужное поле.

public class B { 
} 

public class A { 
    public B getB() { 
     return this.b; 
    } 
} 
0

Обратите внимание, что в вашей текущей структуре кода вы не сможете автоматически Insta ntiate B от вашего объекта A вне метода.

Вы можете создать объект A в описании класса, но для инициализации B вам потребуется использовать конструктор класса.

public class A { 
    private B b = new B(); 
    public B getB() { 
     return b; 
    } 
} 

public class C { 
    private A a = new A(); 
    private B b; 
    public C() { 
     b = a.getB(); 
    } 
} 

или, если вы не хотите создать, вы можете сделать это static.

public static class A { 
    private static B b = new B(); 
    public static B getB() { 
     return b; 
    } 
} 

public class C { 
    private B b; 
    public C() { 
     b = A.getB(); 
    } 
} 
+0

Если я использую статический подход. Это необходимо, чтобы сделать объект B также статическим ?. Могу ли я сделать только getB() как статический? Это будет работать? – Thushi

+0

Если вы сделаете только 'A.getB()' static, это не сработает. Элемент 'b' в' A' также может быть статическим, чтобы метод мог получить доступ и вернуть переменную без создания элемента 'A'. С другой стороны, класс 'B' не должен быть статическим, поскольку элемент будет создан в' A'. –

0

Вы должны получить доступ к классу C до класса A, а затем поделиться ссылкой B по полю.

Таким образом, вы можете сделать что-то вроде этого:

class B { //your function... } 
class A { 
    B b = new B(); 

    public B getB() { return b } 
} 
class C { 
    A a = new A(); 
    public B getB() { return a.getB() } 
} 

}

0

Добавьте конструктор класса C с объектом б в качестве параметра

public class C{ 
    private B bObj; 
    public C(B b){ 
     bObj=b; 
    } 
} 

вызов этого конструктора из вашего класса А , который создаст ссылку на созданный объект B, и у вас будет этот ref в bObj.

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