They all share the same pinout, so you can replace them electrically.
For the ATmega48, you don't have a bootloader either and only half the RAM. I guess if you want to use those, make a dedicated image to put on them, you can't program them the same way as the usual Arduino.
The Atmega88 (and also 48) have a smaller interrupt vector. This will probably mean that you need to recompile the software for them. , if I remember correctly, the Arduino IDE program support them too.