Lol, I work in the airline industry (or I did, up until a month ago).
If you wanted to go full-out on the object-oriented design (which is probably what you should do, since this is java), consider that the first step in outline a problem statement is locating the nouns. Your nouns will be your classes (most of the nouns, not all of them).
So, in your problem statement, your nouns are:
3. First Class
5. Economy Class
There are a few others, but that seems to be most of it. Ok, now we look at our nouns. Some of them are not worth making classes out of. The problem statement says we need an Airplane class, so that is a must. To narrow down our nouns, let's look at their function. More importantly: what type of traits do these nouns have?
1. Seat - Has type (aisle, window, center). Has Passenger (sometimes).
2. Airplane - Has Seats. Has First Class. Has Economy Class. Has Passengers.
3. First Class - Has 20 Seats. Has 5 Rows.
4. Row - Has Seats
5. Economy Class - Has 90 Seats. Has 15 Rows.
6. Passenger - Has Seat.
Now we have to look over our nouns and traits and determine the best way to organize it all. First Class and Economy Class both have seats and rows, and they are both used the same way. This is an indication that they should probably have a relationship of some kind (inheritance - they should both extend from the same object, perhaps a SeatingClass object or something). Now, SeatingClasses have Seats and Rows. Perhaps instead of having both, Rows could contain Seats, and SeatingClasses could contain Rows. Or, since rows serve no real purpose other than holding Seats, perhaps Seats should just contain an integer variable, referencing a row number, and we get rid of the Row object altogether. I'll do the latter here. Now, back to Airplane: since SeatingClasses now contain Seats (which know their respective row numbers), why should the Airplane also contain a list of Seats? Our Airplane contains SeatingClasses (FirstClass and EconomyClass), which each contains their respective Seat lists, so we already covered the airplane's seat trait transitively. Now, if a Seat object contains a Passenger (provided it has been assigned), there is also no reason for an airplane to contain a list of Passengers (we can get that from the seat assignments). A Passenger can have a seat, there is nothing wrong there. So the last thing is the traits for Seats. A Seat can be either an aisle seat, a window seat, or a center seat. There are no special differences between them from a design point of view, so there is no reason to create separate classes for them. Instead, the Seat class can contain a variable indicating what type of seat it is.
So, here is our trimmed down outline:
1. Seat - Has type (aisle, window, center). Has Passenger (sometimes). Has a Row Number.
2. Airplane - Has First Class. Has Economy Class.
3. SeatingClass - Has Seats.
3. First Class - Is A SeatingClass. Has 20 Seats.
4. Economy Class - Is A SeatingClass. Has 90 Seats.
5. Passenger - Has Seat.
The next step will be determining what method each class should have. That one is up to you. Change the design based on how it makes sense when you implement.
The 3 Steps I described will probably be one of the most important skills you can develop as a programmer. Make sure you understand what I explained, and ask any questions if you have them.