In my opinion:
- f1 should be in the parent class and initialized in the child constructor. This way, the get and set methods are only written once.
- m2 should be in the parent class.
- m1 should be also be in the parent class. Don't forget that you can also make methods abstract if they do not have a common implementation but exist in all child classes. This would allow you to call it from other methods in the parent class despite not being defined there. Also keep in mind that the parent class would also need to be abstract in this case.