Think of the object as a kind of "super array." Properties are like keys in an associative array. Also, you can think of properties of an object as a kind of "package deal," bundled together, having them easily accessible in one place
There is nothing wrong with making everything "public," which is the default. If you are working with other developers, however, you may decide mark certain methods or properties only for use internal to the class definition. In this case use "protected" or "private."
If you want to change the functionality of an existing method, simply create a method of the same name in the "child" class. This is referred to as "overriding". You can also create new methods and properties in the "child" class.