Q:

Can an object contain a property that is another object?

I am new in the object oriented world. I am interested on learn the foundations of object oriented programming independently of any language. But for the moment I am doing the implementation on VB.NET.
The question is: Can an object contain a property that is another object? or only the properties can be of primitive types? 
If so, i'll be grateful if you show me an example of this on VB.NET.

A:

As you asked generally about OOP languages: it depends on which language.
First, not all object-oriented languages support a formalized notion of property.  C# and VB do, but Java does not, nor does C++, for example (the others allow manually/individually defined getters and setters instead that are not necessarily acknowledge by the language as pairings of the same property).
C++ on the other hand allows true embedding of an instance of one class within an instance of another.  It also allows a local variable to be a true instance of a class.  
However, Java, C# and VB all use references to instances of objects (in the heap).  So, Java, C#, and VB do not allow true instances of classes as variables or fields.  However, these languages implicitly dereference the references when you use them so it works naturally.  
(In these languages, references, FYI, are passed by value: the caller can modify the object and it will be seen by the callee because the references (copies) point to the same heap object instance, however, if the caller modifies the reference itself, that will not be seen by the callee.)  
In Java, C# and VB, you can therefore put an object reference as a field of a class.  In C# and VB, you can put an object reference as a property of a class (with an optional backing field or just as getter and/or setter).
In C++ you can pass an instance of a class by value, or assign one class to another (of the same type).  C++ also has both references and pointers and you have to be explicit about using each of them vs. getting a true class instance.

