Usually, you use the first.
The "Delegation Pattern" (which is using sub-objects) is a great way to have different implementations of methods you can swap out at runtime - but if you don't need that, it's just unnecessary overhead.
Another common case are what I call "library methods", that is, methods that are not tied to any objects but stateless an just perform some calculations. Those can be delcared public static
and moved to an abstract class. YOu don't create objects for that kind of relationship though (just classes with static methods), so it's entirely different to your example.