- Objects can only have private variables
- Inherited Objects get all private variables
- Inherited Objects do not get any of the protected class methods.
This one has to do with the way Ruby handles private/protected/public. In Ruby, public means public like normal. Private means only objects with its self ID can call the method. Protected methods can be called from a class or descendant class instances, but also with another instance as its receiver. The catch is that with this model, protected class methods don't make sense. You can set a class method to protected, but it doesn't actually mean anything given the inheritance model.
Also because Ruby uses a message passing system it has a very nice feature of the missing_method function. When a function fails to call it calls that instead, before an error is reported. This gives ruby a great deal of flexibility with dynamic functions.
I am just curious how others feel about, for instance, the way Ruby handles private/protected and what other languages have their OO quirks.
This may not be that big a quirk, but I started OO programming in C++ and this differs vastly from the way C++ handles private and protected methods.