Working with Classes (inheriting), @ properties and Initialization
This is my first review so bear that in mind when you are reading it.

The first thing I see is that in the initialization, you should not use the automatic setters and getters for properties.  The reason for this is that the object may not be completely initialized, and thus may fail.  So instead of doing: 

self.a1 = x;
self.a2 = s;
self.a3 = y;


access the properties directly like so:

_a1 = x; 
_a2 = s;
_a3 = y;


Otherwise, your init pattern is good, and bonus points for having a default -(id)init that calls your designated initializer.  

For the names of all of these, I would make sure to always use a more descriptive name.  It is probably okay in such a simple example to use a1, x, y, etc, but for anything more complicated, use names that describe in more detail exactly what the variable is.

In the description method it looks like you are calling the int values with %d.  I can't think of a reason not to use %i, but maybe I am wrong here.

One last thing, in the interface the spacing inside the declaration of -(id)initWithEtc is loose.  It looks correct in the implementation though.