Flydog дал вам кое-что, что вы могли бы использовать; Я просто хотел сделать небольшую заметку о моих комментариях / jimi / enigmativity:
Такое ощущение, что вы надеетесь в какой-то момент создать подкласс Two и изменить Z; Вы считаете, что если ваш новый класс Three, который имеет stati c Z, равный 43 и производный от Two, используется в сочетании с One, то вы получите .X
, равное 43. Проблема заключается в том, что stati c вещи не могут быть отменены; они разрешаются во время компиляции, и они могут выглядеть так, как будто в определенных обстоятельствах происходит переопределение, но на самом деле это перегрузка или скрытие, и компилятор выбирает что-то с определенным именем в определенном порядке из наследования tree
Поскольку stati c вещи не наследуются (и, возможно, в этом нет необходимости, потому что они, следовательно, всегда известны вам, разработчику, во время компиляции), не ожидается, что однажды кто-то создаст подкласс вашего кода и напишет:
One<Four> a = new One<Four>();
И ваш код должен будет подобрать то, что они установили Z, и использовать его. Вы знаете свои Z и можете использовать их соответствующим образом при компиляции, а они знают свои Z и должны использовать их соответствующим образом. Но я понял, к чему ты клонишься с ТЗ ..