Foo[] can contain objects of Foo or its subclasses When u do Foo[1] , u have in it contained either a Foo object or any of its subclass.
U can also have this done: Face fc = Foo[1];// Because Face is a super interface of the Foo object Bar br = Foo[1]; // Bar is Foo's super class, so thats ok
So thats the reason for ur second output.
1) Now for the first question keep in mind this: Foo[] extends (Object, Object[]) and not Foo, Bar or Face
I hope this is ok
If you're gonna buy things, buy this thing and I get a fat kickback:
Free, earth friendly heat - from the CodeRanch trailboss