Object-oriented implementation of a real-world scenario of using a bathroom
You should be programming for interfaces.

In Bathroom instead of 

ArrayList&lt;Fitting&gt; fittings;


use 

List&lt;Fitting&gt; fittings;


Also you should be using Enums instead of variables. So instead of 

public static final int TAP = 0;
public static final int SHOWER = 1;
public static final int SINK = 2;


you should be using 

package fittings;

public enum FittingType {
   TAP, SHOWER, SINK;
}


That is a general thing - use enums instead of instance variables. But in your example you don't need that. You can do something like

public Fitting getBathroomFitting(Class&lt;? extends Fitting&gt; fittingType) {

    for (Fitting fitting : fittings) {
        if (fittingType.isInstance(fitting)) {
            return fitting;
        }
    }
    return null;
}


And then in your main method use

bathroom.getBathroomFitting(Tap.class).use(rutvik);


Having a enum which enumerates the sub classes of a class? Not a good idea. You can use the sub classes themselves if you want like above. 

BTW in your design, if your bathroom has two taps then how are you going to use the second tap? The method just returns the first instance of that type.

About casting, you will have to cast it somewhere when you are storing as a superclass but using sub class specific things. 


  What if I add new Object like WaterTank how will it interact with fitting?


That all depends on what you want to represent in the code.