О порядке порядка модификаторов
Они могут использоваться в любом порядке. Это просто стилистический выбор, который вы используете. Я всегда пользуюсь видимостью, и большинство других кодов тоже делает.
О втором вопросе:
static public float val()
Это просто статическая функция. Вы вызываете его с помощью PI.val()
. Вам просто не нужен экземпляр класса для его вызова, но вызовите его непосредственно в классе. Статическая функция не получает ссылку this
, не может быть виртуальной, она похожа на функцию на языке без OOP, за исключением того, что она использует класс как пространство имен.