2015-03-31 7 views
0

Я создал объект, называемый одним, используя класс Shape, и я назвал переменную экземпляра x1 для «one» и установил ее в int x, выполнив int x = one. x1; и он отлично работает. Но когда я пытался сделать это в другом классе, он вообще не работает. Когда я пытался сделать это в другом классе, появляется сообщение об ошибке, в котором говорится, что «невозможно изменить переменную». Если кто-то знает, что случилось, и как это исправить, сообщите мне. Спасибо.Использование переменной экземпляра объекта в другом классе

package events; 

public class Shape { 

int x1; 
int x2; 
int y1; 
int y2; 
int width; 
int height; 

Shape(int x1, int y1, int width, int height) { 

    this.x1 = x1; 
    this.y1 = y1; 
    this.width = width; 
    this.height = height; 
    this.x2 = x1 + width; 
    this.y2 = y1 + height; 

} 

public static void main(String[] args){ 

    Shape one = new Shape(4,4,4,4); 

    int x = one.x1; 

} 

} 

Коды, которые не работают:

package events; 

public class test { 

public static void main(String[] args){ 
    int x = one.x1; 

} 

} 
+1

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

+2

Переменные в Java не являются глобальными, их видимость зависит от того места, которое они определены. В вашем коде 'one' определяется внутри метода' main() 'и не доступен и не доступен нигде вне его. –

+0

Где указана переменная 'one'? –

ответ

1

Это один работает:

package events; 

public class Shape { 

int x1; 
int x2; 
int y1; 
int y2; 
int width; 
int height; 
static Shape one = new Shape(4,4,4,4); 

Shape(int x1, int y1, int width, int height) { 

    this.x1 = x1; 
    this.y1 = y1; 
    this.width = width; 
    this.height = height; 
    this.x2 = x1 + width; 
    this.y2 = y1 + height; 

} 

public static void main(String[] args){ 


    int x = one.x1; 

} 

} 

Другой класс:

package events; 

public class test { 

public static void main(String[] args){ 
    int x = Shape.one.x1; 

} 

} 
1

Вы должны установить переменные как общественный public int x1;, если вы хотите получить доступ к ним извне.

Однако это хорошая практика, чтобы использовать методы получения и установки вместо:

//things 
private int x1; 
//more stuff 
public int getx1(){ 
    return x1; 
} 
public void setX1(int x){ 
    x1 = x; 
} 

Редактировать:

появляется я пропустил точку вопроса, на самом деле ответить на него, вы не можете получить доступ переменная вне того, где она определена. Если вы хотите использовать one где-то в другом месте, вам придется либо создать для него сеттер, либо определить его в более широкой области.

Если нужно, я рекомендую делать что-то, как я показать выше, определить private Shape one; затем установить его в главном one = new Shape(...) и добавить поглотитель для него public Shape getOne(){...}

затем в тестовом классе можно назвать getOne() и доступ к переменным.

+0

Сообщение об ошибке было '' нельзя решить для переменной. "', Поэтому проблема заключается в 'one', а не' x1'. –

+0

Я считаю, что проблема OP заключается в использовании 'one' где-то вне метода' main() ' –

+0

ах, полностью упустил это. – Epicblood

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