The verb имеет
is transitive just like in English, German, etc., that is why what follows it are its direct objects and, naturally, they are in the Accusative case. In your example all the nouns are animate, and in Russian all the animate plural nouns (сыновей, собак, жен are plural and animate) have their Accusative case the same as their Genitive case, that is why you had mistaken it for the Genitive case.
As for У меня есть
, what follows this expression is the subject of the expression, that is why it is in the Nominative case, you can easily see that in the past of future tense where the predicate verb быть (Present есть, Past был, Future буду) agrees in number with the subject:
Past Singular: У меня был друг.
Past Plural: У меня были друзья.