2013-05-05 2 views
0

Я хочу создать список классов с разными атрибутами, но я столкнулся с проблемой: когда я добавляю новый, все остальные изменяются (код действительно большой поэтому я отправляю только маленький образец)Java составить список классов с несколькими объектами

public abstract class A{ 
public static Point Position; 
public static int LifePoints; 
public static int range; 
public static int atackValue; 
public static double movementSpeed; 

public double getMovementSpeed() { 
return movementSpeed; 
} 
public static void setMovementSpeed(double movement) {//this n funciona 
movementSpeed = movement; 
} 
(...)to make the topic shorter i only show the movement part but class A contains all getters and setters for all movement,position,range,life points and attack value 
} 

public class B extends A{ 

public static Point Position; 
public static int LifePoints=10000; 
public static int range=50; 
public static int atackValue=100; 
public static double movementSpeed=2; 

public A(Point startPoint){ 
setMovementSpeed(movementSpeed); 
setAtackValue(atackValue); 
setRange(range); 
setLifePoints(LifePoints); 
setPosition(startPoint); 
} 

public class createB(){ 

(...) 

public void create(){ 

private List<B> list = new ArrayList<B>(); 

B b = new B(startpoint); 

list.add(b); 

} 

(...) 

for(int x=0;x!=list.length();x++){ 

move(list.get(x)); 

system.out.println(list.get(x).getMovementSpeed()); 

} 

Println возвращает правильное значение (2.0) для всех б создала, но каждый раз, когда я создаю новые б всех остановок другого б двигается и новый б двигается быстрее предыдущий. Функция перемещения, сделанная моим учителем, и подтверждена, что она работает правильно. Я подозреваю, что позиция работает неправильно, и вместо перемещения изображений 2 пикселя он перемещается только один раз.

+3

В вашем коде есть острый «статический-итис». Избавьтесь от большинства ваших статических модификаторов, чтобы пациент не погиб. –

+1

удалите статическую информацию из полей – user1121883

+0

Также рассмотрите возможность очистки образца кода. Большинство из этих полей не имеют отношения к вашей проблеме (или, вернее, являются дублирующими проявлениями одной и той же основной проблемы), и это вовсе не отступы. – millimoose

ответ

7

Это потому, что у вас есть статические поля вместо переменных экземпляра.

+0

Он работает! Спасибо. – Miigueel

1

Первый пункт состоит в том, что поля static распределены по классам: для всех экземпляров имеется только одно поле.

Существуют и другие основные ошибки в вашем образце.

  • Если вы создаете подкласс, он наследует все поля из своего суперкласса. Вам не нужно повторять это. В этом весь смысл наследования. Ваши начальные значения должны быть установлены в конструкторе.

  • Конструктор класса должен быть определен в этом классе и называться таким же, как этот класс. Не имеет смысла объявлять конструктор A внутри класса B (я полагаю, что ваши корректировки для публикации этого были не совсем чистыми). У вашего кода также есть некоторые проблемы с несбалансированными круглыми скобками.

  • У вас, похоже, есть инструкции выполнения вне метода (или статический блок инициализации, но давайте оставим это в покое), что также не имеет смысла.

  • Как показано, абстрактный класс A является абсолютно излишним.

  • Ваш метод create никогда не возвращает список, который он создал. Как вы хотите его использовать?

  • Использование отступа. Стандарт в Java - это 4 пространства отступа для каждого вложенного блока.

  • Назовите свои переменные должным образом. Переменная всегда должна начинаться с строчной буквы. Имена, начинающиеся с прописных букв, обозначают классы.

В целом, я чувствую в нем большое замешательство. Вы должны попытаться прочитать больше кода реальных проектов, чтобы почувствовать язык (языки).

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