Мне нужен родительский открытый абстрактный класс, который будет иметь несколько дочерних общедоступных статических классов. Мне нужен только один экземпляр класса Weapon, несколько статических классов Bow, Sword < и т. Д., Которые расширяют родительский элемент и могут существовать также только в одном экземпляре (по крайней мере, мне нужно иметь возможность получить их статические настройки). Как это сделать правильно?Как определить дочерний статический класс, который расширяет родительский абстрактный?
public abstract class Weapon {
...
}
public static class Bow extends Weapon {
static String type = "Bow ";
static int damage = 10;
}
public static class Sword extends Weapon {
static String type = "Sword";
static int damage = 10;
}
Получение ошибки:
Illegal modifier for the class Sword; only public, abstract & final are permitted
Я удалил статична и она работала:
public final class Sword extends Weapon {
static String type = "Sword";
static int hitPointsTaken = 10;
}
я могу скомпилировать этот System.out.println( Sword.type );
но не в этот System.out.println( Weapon.Sword.type );
. Означает ли это, что я не могу получить доступ к ребенку через абстрактный реферат?
И где код для класса «Меч»? –
Попытавшись сделать Weapons.Sword.type, кажется, что вы думаете, что выведение класса через «extends» и вложение класса - одно и то же. Они не. Первый создает отношения «есть»; Меч - это оружие. Второй создает связь «имеет»; Оружие имеет Меч. Оператор точки позволяет вам получать доступ к полям, методам и т. Д., Если объект имеет, а не другие классы, полученные из того же класса, что и данный объект. –