2012-04-03 5 views
1

Прежде всего, извиняюсь, если мой вопрос трудно понять. Я с трудом пытаюсь объяснить, с чем мне нужна помощь. Я новичок в Java и концепции прохождения по ссылке и т. Д.Параметры объекта в конструкторе

В принципе, мне нужно знать, почему приведенный ниже код неверен. Как сообщить Java использовать метод для объекта, переданного в качестве параметра конструктора? Извиняюсь снова, и спасибо за чтение!

public ClassOne(ClassTwo twoObject){ 

} 

public boolean OneMethod(){ 
    twoObject.MethodName(); // twoObject cannot be resolved. 
} 

ответ

2

Вы используете локальный объект в другом методе оно не работает, вы можете создать глобальный объект, чтобы сохранить его, а затем использовать его ...

public class classOne{ 

    Classtwo object; 
    public ClassOne(ClassTwo twoObject){ 
     object = twoObject; 
    } 

    public boolean OneMethod(){ 
     object.MethodName(); 
    } 
} 

Надеется, что это помогает :)

+0

Ах, конечно же! Спасибо огромное! :) – user1310148

+0

приветствую :) –

2

Вы должны были бы магазин ссылка на twoObjectлокально в экземпляре этого класса для того, чтобы доступ к нему за рамки конструктора. Прямо сейчас конструктор выполняет с переданным элементом, ничего не делает, и экземпляр twoObject исчезает из этого класса для всех практических целей.

0

Код неверен, поскольку «twoObject» не входит в область, когда вызывается его метод «Имя метода». Он был в области видимости, если он используется в конструкторе, но не имеет смысла в методе «OneMethod». Чтобы использовать его, вы можете создать переменную класса и назначить ее «twoOject» в конструкторе. Затем вы можете использовать его во всем классе.

public ClassOne { 

    private ClassTwo twoObject; // instance variable 

     public ClassOne(ClassTwo twoObject){ 
      this.twoObject=twoObject; 
     } 

     public boolean OneMethod(){ 
     twoObject.MethodName(); // twoObject is now a class memeber and hence in scope and hence will be resolved 
     return true; //could also be false, just adding a return statement as the return type is boolean 
     } 

    } 
+0

Я думаю, что правильный термин - «переменная экземпляра» – newacct

+0

Да, [переменная класса] (http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) подразумевает нечто иное. Но хороший ответ. – Leigh

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