I believe that you ar building classes without having done the analysis.
Reading what you say, you have a domain of:
Airline, Agent, Customer, 'Billable Customer',
Bills (Sometimes called 'invoices'), 'AirlineAgent', Client,
you have a use case of
'Issue Bill'
You have rleationships from the table that
There is a many-to-many relationship between agent and airline, with a 'link' class, 'AirlineAgent' that identifies the period of time when the agent was an agent for that airline.
In your answer 'A1', who/what generates invoices? You say 'i', but it will be an object from a class. If it is an actor, then there will be some form of recognition of this in the classes. Bills dont just spin down out of the sky.
I would have guessed that the agents and the airlines generate bills, but your wording all implies that they receive them???? Are they bills for fuel or landing fees etc?
Bills are generated somewhere and passed to 'Billable Customers' who may be either an airline or an agent. 'CLIENT' seems to be another name for 'Billable Customer'. You should be aware of just using different words to mean the same thing (Bill = invoice), (Client =Billable Customer=Customer.) Draw little class diagrams. Name the classes and DO NOT deviate from that. If you cant describe something, then maybe you need another class. Draw it. Then make it fit into you story.
Your answer A2 now gives some more association rules.
Agents can handle (many) airlines; your table fits that.
Agents cannot handle agents; if agents and airlines are specialisations of 'Billable Customer, then this says that the agent-airline association MUST go between the two speciaised classes, and NOT from the agent to 'Billable Class' or indeed recursively from agent to agent.
This misses out one possibility. Can airlines handle one or more agents?
Then I come across the Class 'Billing' introduced by someone. NEVER give a class a name that is a verb as a name; somtimes application controllers can have such thing, but then be careful. Keep thinking about objects. I have never seen a 'Billing'. If you keep to objects and use cases until you get the basic analysis right, it will all come straight in the end. (Sorry to criticise someone trying to help. What they were saying is generally good advice, but that bit is wrong.)
----------------------
Summing up.
You have a parent class - BillableCustomer (id, name, numericCode, alphaCode)
Inheriting from this is - BillableCustomer::Agent()
Also inheriting is - BillableCustomer::Airline(iata, icoa)
The 'Agent' class is needed because you seem to have asymetric associations between the two children:
Agents (1..handle..*) Airlines
??? Airlines (1..handle..*) Agents ??? But you dont actually say this one does NOT exist.
If the second relationship exists, then you need a link class to resolve the (many..many) relationship.
If it does NOT exist, then the link class just becomes the lists of airlines that each agent had during the stated timescale. It houses the time periods appropriate to the agency-airline association, so it is still needed.
Now you also have a class of 'Bill', which is what is passed to the Billable Customer. Because it can be passed to one or the other of Agency or Airline, then it can be passed to the BillableCustomer without caring which specialisation is being developed. With this must be some form of 'Bill Generator'.
So there are 5 classes in that scenario. I suggest you try to draw the sequence diagram to sort these associations in you head; draw one for 'pass bill to agency' and one for 'pass bill to airline'. They should be identical to the one 'pass bill to BillableCustomer'. However, 'trace bill to airline' will give you two paths (or use cases).
Identify your classes and use cases and then design your classes. Finally code. Dont break this rule, but do practice getting so slick that some of these steps ar just done in you head as you 'hack' code.
Good luck. Gil