Понимание abstract\interface классов, помощь в их реализации

Всем здравствуйте

Я новачек и хочу более детально изучить Java, прочитал много статей насчёт abstract классов и interface, но мне сложно понять как их использовать и их суть.

Сейчас с пытаюсь сделать простенький плагин в котором мне нужно сделать 2 разных объекта в котором будут разные значения, типо этого -

public abstract class GuiItemType {

}
public class GuiItemSend extends GuiItemType {
    private String server;
    private String permission;
    private Integer max;
    public GuiItemSend(String server, String permission, Integer max){
        this.server = server;
        this.permission = permission;
        this.max = max;
    }

    public String getPermission() {
        return permission;
    }

    public Integer getMax() {
        return max;
    }

    public String getServer() {
        return server;
    }
}
public class GuiItemCommand extends GuiItemType {
    private List<String> cmds;
    public GuiItemCommand(List<Strng> cmds) {
        this.cmds = cmds;
    }

    public List<String> getCmds() {
        return cmds;
    }
}

И использовать их как-то так (замечу, я не знаю правильно ли вообще так делать, я хочу просто понять и получить советы как было бы лучше это сделать)

public class Example {
    public createGUI(GuiItemType type){
        if(type instanceof GUIItemCommand){
            GuiItemCommand = (GuiItemCommand) type;
        } else if(type instanceof GUIItemSend){
            GuiItemSend = (GuiItemSend) type;
        } else {
            throw new Exception(///)
        }
    }
}

Ответы (0 шт):