ты пишешь на Си-пошарпанном, я пишу на Джаве. И у тебя все-таки неверный вывод на экран. Попробуй переписать main так: Child_1 ch1 = new Child_1(); Child_2 ch2 = new Child_2(); Child_3 ch3 = new Child_3();
ага, затупил, вынес вверх, и получил то, о чём ты пишешь:
5 3 3
Поштудировав форумы с хелпом, нашёл: "статические переменные не могут перекрываться в наследниках и всегда будут относиться к тому типу, в котором они объявлены"
Потыкал ещё, элегантного способа не нашёл - либо класс с переменными выносить отдельно и передавать по ссылке, и уже крутить внутри, либо к каким нибудь хитростям платформы прибегать, типа делегатов, ссылок (туда не копал).
хранить в одном месте и передавать по ссылке, если такое понятие применимо к джаве.... все равно придется хранить динамчески, чтобы сохранять в хмл))))
дело в том, что они являются неизменными с точки зрения конкретного экземпляра исследуемого мира и существа. Для пользователя - это параметры, задающиеся с клавиатуры. Вот так.
Решено было завести еще один класс Constants , хранящий базовые параметры, хранящийся в неком менеджере существ (раз он все равно есть), а при вызове конструктора менеджером экземпляр передается в качестве параметра без клонирования. При вызове конструктора типа Creature (Creature parent), ссылка на константы копируется у родителя.
Comments 7
Reply
Child_1 ch1 = new Child_1();
Child_2 ch2 = new Child_2();
Child_3 ch3 = new Child_3();
Console.WriteLine(ch1.Test());
Console.WriteLine(ch2.Test());
Console.WriteLine(ch3.Test());
Console.ReadLine();
Reply
5
3
3
Поштудировав форумы с хелпом, нашёл:
"статические переменные не могут перекрываться в наследниках и всегда будут относиться к тому типу, в котором они объявлены"
Потыкал ещё, элегантного способа не нашёл - либо класс с переменными выносить отдельно и передавать по ссылке, и уже крутить внутри, либо к каким нибудь хитростям платформы прибегать, типа делегатов, ссылок (туда не копал).
Напиши потом какое решение применила.
Reply
Reply
abstract class Parent {
private final int property;
protected Parent(int property) {
this.property = property;
}
}
class Child1 {
private static final PROPERTY1 = 1;
public Child1() {
super(PROPERTY1);
}
}
Reply
Решено было завести еще один класс Constants , хранящий базовые параметры, хранящийся в неком менеджере существ (раз он все равно есть), а при вызове конструктора менеджером экземпляр передается в качестве параметра без клонирования. При вызове конструктора типа Creature (Creature parent), ссылка на константы копируется у родителя.
То есть все вроде получилось)))
Reply
Reply
Leave a comment