If you want all the child *metadata*, you can loop through the `getChildRelationships` results like so:

    for (ChildRelationship relation : SObjectType.Opportunity.getChildRelationships())
    {
        String relationshipName = relation.getRelationshipName();
        // the above value is what you would use in a SOQL sub-query
        // e.g. SELECT Id, (SELECT Id FROM Children) FROM MyObject

        SObjectType childType = relation.getChildSObject();
        // the above value is the token for the child object

        SObjectField lookupField = relation.getField();
        // the above value is the token for the lookup field on the child object
    }

If you want to get the child *data*, you'll need to build a dynamic query using the above results from the `getRelationshipName` method.

Building dynamic queries in an elegant way is perhaps beyond the scope of this question. Below is a simple example of what it might look like.

    List<String> subqueries = new List<String>();
    for (ChildRelationship relation : SObjectType.Opportunity.getChildRelationships())
        subqueries.add('(SELECT Id FROM ' + relation.getRelationshipName() + ')');
    String query = 'SELECT ' + String.join(subQueries, ',') + ' FROM Opportunity';