package com.evansgame.newproject.fps;
import java.util.concurrent.locks.ReentrantLock;
import java.util.*;
abstract class Weapon{
int weaponID;//why can't this be static?
DrawMe drawMe;//why can't this be static?
int itemID;
float x;
float y;
float z;
static ReentrantLock weaponsLock = new ReentrantLock();
static LinkedList<Weapon> weapons = new LinkedList<>();
boolean active = true;
Weapon(int itemID, float x, float y, float z){
this.itemID = itemID;
this.x = x;
this.y = y;
this.z = z;
}
static class Bazoooka extends Weapon{
static final int WEAPON_ID = 0;
static final DrawMe bazoookaDrawMe = DrawMe.colorClone(DrawMe.loadModel("bazoooka"),0,.1f,.8f,1,0,.2f);
Bazoooka(int itemID, float x, float y, float z){
super(itemID,x,y,z);
drawMe = bazoookaDrawMe;//same across all Bazoookas
weaponID = 0;//same across all Bazoookas
}
}
}
Переменные weaponID и drawMe должны быть одинаковыми во всех экземплярах Bazoooka. Когда я получаю доступ к экземплярам оружия, мне нужно оружиеID и DrawMe для любого типа оружия, которым это может случиться. Похоже, что эти переменные статичны, почему мне приходится использовать переменные экземпляра для них?Почему это не может быть статичным?
Если вы сделаете его статическим, тогда его значение будет одинаковым для всех ** Оружия ** не только для всех экземпляров Bazooka, так что это не очень хорошая идея. –
Мне интересно, хотите ли вы использовать перечисление для некоторых ваших констант. –
Но все подклассы должны иметь те же статические поля, которые являются статическими для подклассов. Есть ли способ, которым я могу поместить это определение в абстрактный суперкласс? – user28775