Interface Segregation Principle in constructor
No, this is all broken. The basic issue is the cast-to-D in the following line:


this.d = (D)new MyWaterFowl();



That gives the warning:


Type safety: Unchecked cast from MyWaterFowl to D



Ignoring Generics warnings normally means you are doing something wrong. In this case, you are.

You are doing a cast to a type where you have no certainty, in fact, you are certain that it will fail.... 

.... the solution here, is to not have a default constructor. It does not make sense for you. Why do you think you need one?

Also, why does MyAmericanEagle extend CanQuack ?