Designing an "interaction" system for tile game

I’m a bit stumped with my project. I am using Tiled and libGDX, and I need to come up with a good way of interacting with different tiles. Currently, my player can only interact with one kind of tile but I need many more. Here is my working code at the moment:

  
this.cropLayer = PlayState.getLevelManager().getCurrentLevel().getCropLayer();

  private void handleCropAction() {
        if (cropLayer.getCell(facingTileX, facingTileY)
                .getTile()
                .getProperties()
                .containsKey("crop")) {
            if (liftItem(facingTileX, facingTileY)) {
                return;
            }
            PlayState.getLevel().getCrops().getCropTile(facingTileX, facingTileY).advanceState();
            System.out.println("advanceTile (" + facingTileX + ", " + facingTileY + ")");
            ACTION = false;
        }
    }

So I ask the level for a tile layer, then check if the cell I’m looking at contains the property “crop”.

My issue is that I need to do with with multiple types of tiles: signs, beds, water, doors, and chest. I know my current method will not scale up as well and will become a giant mess, and I need some help designing a more general kind of interaction system.

I was considering creating an interface Interaction as follows

package Levels.Interactions;

import Levels.Interactions.InteractionLayer.INTERACTION;

public abstract class Interaction { 
    public INTERACTION type;
    
    public Interaction(INTERACTION typeIn){
        this.type = typeIn;               
    }    
    
    public abstract void act();
    public abstract void update();
    public abstract void render();
}

and creating one 2D array of these Interactions from all map layers combined (Code here: http://pastebin.java-gaming.org/e0c1e796e84). From there I would make more classes implementing that state IE: Sign Interaction extends Interaction. Does this system seem adequate? Has anyone else done something similar before and could share some tips with me?

I also am struggling a bit with states and how to interrupt gameplay for things like text boxes. I have GameStates:Play, Menu, etc, but for UI interrupting gameplay I feel that my Play state needs sub-states such as “playing”, “dialog”, etc. Any tips regarding this would be appreciated as well.