Java (approximating "constant" with "final"): Works like I want, the constant is statically bound. Defining a new constant with the same name (and a different type!) in a subclass is allowed, but does not alter the behaviour of inherited methods. The behaviour is the same regarless of wheteher I declare the constant as "static" or not.
C++ (approximating "constant" with "static const"): Like Java. Here the "static" is needed though, because I'm not allowed to give an initializer otherwise.