Functions and properties can be declared as protected. These are only accessible by other stuff inside of that class or from subclasses; they are inaccessible anything outside of that class hierarchy.

In this case, something() is protected, so we cannot call it from main(). We can call something() from somethingElse(), as somethingElse() is implemented on a subclass of Foo. And, since somethingElse() is public (the default), we can call somethingElse() from main() and therefore indirectly call something() from main().

You can learn more about this in:
Run Edit