At the high level software development methods can be split into two large categories - predictive and adaptive.
Predictive methods make an assumption that requirements can be precisely defined upfront and will not change during development.
Adaptive methods make an assumption that requirements will change during development.
Waterfall and similar methods belong to first category, while agile methods belong to second category.
If to use non-software analogy, predictive methods are similar to traditional artillery - they trying to take into account as much parameters of the target (position, velocity, etc.) and environment (wind, air temperature and pressure, etc.) as possible and then make a shot. If these parameters were measured and taken into account correctly, then target is hit. If anything went wrong, target is missed and new shot is required - time and cost of hitting target multiplies with every miss.
In contrast adaptive methods are more like guided missile - once it is launched, the trajectory is periodically updated to make sure it points to the target. Even if condition are changed there are still high chances that target will be hit from the first shot.
In some (rare) cases requirements to the software project can be precisely defined upfront. In such cases predictive methods work just fine. But wast majority of the projects have no precisely defined requirements available upfront. This is why adaptive methods suit better in most cases.