f cannot be called internally (i.e. f() does not work, but this.f() works).When would you use External function vs Public function?
Public functions are also part of the contract interface and can be called either internally or via message calls.
Internal functions can only be accessed from within the current contract or contracts deriving from it. They cannot be accessed externally.
Private functions are like internal ones but they are not visible in derived contracts