In choosing between public and private (or protected or default) I recommend that any time you're not sure, use private. If you get a compile error, then you will immediately know that there's a reason why it can't be private. But in general, it's easier to change a declaration from private to public than to change it from public to private. So when in doubt, try private, and you can easily make it public later if you need to.
For static vs. non-static, it's harder to say. If you need to use any nonstatic member data, the n you can't make the method static. But if you don't need nonstatic data, it still may be beneficial to use a nonstatic method, in order to take advantage of polymorphism. Basically, if you think you might need more than one implementation of a method for different situations, then it's probably a good idea to make the method nonstatic. But if you're pretty confident that you will only ever need one implementation, then you might as well make the method static, as it will usually be easier to use.