Java: Как кодировать элементы для наследования свойств сырья? - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в Java. Моя проблема, например:

  • Огонь: DMG + 1
  • Камень: DEF + 1

Объединяя в:

  • Огненный камень: огонь + камень и наследуют оба их свойства (DMG 1, DEF 1).

  • Пламя: огонь + огонь и наследуют 2 свойства огня (DMG +2).

Я играл с классами и интерфейсами, но, похоже, не работает. Мне кажется, что Java не поддерживает множественное наследование, но множественные интерфейсы. Интересно, как я мог бы кодировать каждый класс / интерфейс для этого, чтобы работать?

public static int DMG, DEF = 0;
public static String DESC = "";

interface fire {
    DMG = 1; }

interface stone {
    DEF = 1; }

class firestone implements fire, stone {
    DESC = "Born in fire and stone";
    //DMG and DEF calculations
}

1 Ответ

0 голосов
/ 05 июля 2019

Вам лучше использовать композицию, вот что вы могли бы сделать:

public class Main {
public static void main(String[] args) {
    Tool firestone = new Tool(new Fire(), new Stone());
}

private static interface Component {
    int getDmg();
    int getDef();
}

private static class Fire implements Component {
    @Override
    public int getDmg() {
        return 1;
    }

    @Override
    public int getDef() {
        return 0;
    }
}

private static class Stone implements Component {
    @Override
    public int getDmg() {
        return 0;
    }

    @Override
    public int getDef() {
        return 1;
    }
}

private static class Tool implements Component {
    List<Component> components;
    int dmg;
    int def;

    public Tool(Component... component) {
        components = new ArrayList<>();
        components.addAll(Arrays.asList(component));
        dmg = 0;
        def = 0;
        for (Component c : components) {
            dmg += c.getDmg();
            def += c.getDef();
        }
    }

    @Override
    public int getDmg() {
        return dmg;
    }

    @Override
    public int getDef() {
        return def;
    }
}}

Моя реализация может быть излишней: P, но она расширяема, и вы добавляете больше компонентов, которые становятся все более и более сложными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...