有关Java OOP的问题(继承)

发布于 2025-02-01 20:05:58 字数 1813 浏览 2 评论 0原文

我正在尝试制作类似于“图灵完整”的电子游戏。在此游戏中,您应该将电路件连接起来,以在最后创建计算机。因此,我有一个关于继承的问题。我有一个称为“电路软件”的类,每个对象现在按以下方式扩展了以下

public Circuitware implements connectable {

    protected int x;
    protected int y;
    protected int allowedConnetions;
    protected Ciruitware[] connections;
    private int totalConnections;

    public Circuitware(int x, int y, int allowedConnections, Circuitware[] connections) {
        this.x = x;
        this.y = y;
        this.allowedConnections = allowedConnections;
        this.connections = new Array[allowedConnections];
        for (Object O: connections) {
            if (O != null) {
                this.totalConnections += 1;
            }
        }
    }

    public int getX() {
        return this.x;
    }
    
    public int getY() {
        return this.y;
    }
    
    public void setX(int x) {
        this.x = x;
    }
    
    public void setY(int y) {
        this.y = y;
    }
    
    public<T> void addConnection(T connection) {
        if (this.totalConnections<this.allowedConnections) {
            this.connections.add(connection);
        }
    }
}

public class LogicGate extends Circuitware {

    String type;

    public LogicGate(int x, int y, int allowedConnections, Circuitware[] connections, String type) {
        super(x, y, allowedConnections, connections);
        this.type = type;
    }

    public boolean output() {
        //Depending on the gate and input we output things
    }

}

示例 连接如果不是门,则有2个连接,如果它是一个和XOR,则是XOR,或GATES或3个连接,如果它是扩展或扩展的,或者,扩展和门,开关只能有0。有更好的方法可以做到这一点。 ?

我还需要帮助理解,如果我有一系列类型的电路软件,我可以从其子类中添加对象吗?因为逻辑门的输出和其他逻辑门的输入可以输入时钟。

如果我完全摆脱了“电路软件”类,它会更好吗?但是,这不会使不同类别之间的连接更加困难吗?

I am trying to make a videogame that is similar to "Turing Complete". In this game you are supposed to connect circuit pieces to create a computer by the end. So I have a question on inheritance. I have a class called "Circuitware" and every object extends this as follows

public Circuitware implements connectable {

    protected int x;
    protected int y;
    protected int allowedConnetions;
    protected Ciruitware[] connections;
    private int totalConnections;

    public Circuitware(int x, int y, int allowedConnections, Circuitware[] connections) {
        this.x = x;
        this.y = y;
        this.allowedConnections = allowedConnections;
        this.connections = new Array[allowedConnections];
        for (Object O: connections) {
            if (O != null) {
                this.totalConnections += 1;
            }
        }
    }

    public int getX() {
        return this.x;
    }
    
    public int getY() {
        return this.y;
    }
    
    public void setX(int x) {
        this.x = x;
    }
    
    public void setY(int y) {
        this.y = y;
    }
    
    public<T> void addConnection(T connection) {
        if (this.totalConnections<this.allowedConnections) {
            this.connections.add(connection);
        }
    }
}

Now an example of a subclass is

public class LogicGate extends Circuitware {

    String type;

    public LogicGate(int x, int y, int allowedConnections, Circuitware[] connections, String type) {
        super(x, y, allowedConnections, connections);
        this.type = type;
    }

    public boolean output() {
        //Depending on the gate and input we output things
    }

}

Now the thing is that the number of allowed connections depends on the type of the circuit, for example logic gates in my game can have 1 connection if it is an NOT gate, 2 connections if it is an AND, XOR, NOR gates or 3 connections if it is and extended OR, extended AND gates, where are switches can only have 0. Is there are better way of doing this?

I also need help understanding that if I have an array of type Circuitware can I add objects from its subclasses? Because the output of logic gates and inputs of other logic gates while they can be inputs to clocks.

Would it be better, design-wise, if I got rid of the "Circuitware" class altogether? But then wouldn't that make connections between different classes harder?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文