if there's something u want every subclass to do exactly the same way and there are things u cannot generalize u can go for an abstract class
take IceCream for instance
it could be of many flavors - vanilla,choclate,
coffee, butterscotch.........
so they all will taste() differently depending on their flavor,
but when u say melt() they simply have to ...well melt!!
so in this case u could use an Abstract class Icecream:
abstract class IceCream{
public void melt()
{
}.....melt!!!
abstract Taste taste();
}