首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java解决方案

Java解决方案
EN

Stack Overflow用户
提问于 2022-09-06 12:01:14
回答 1查看 63关注 0票数 0

我正在用Java/Processing中的函数块制作一个GUI。

我有一个通用类,它有管理X和Y坐标的方法。所有块都是从普通类继承的。

这允许我创建一个单独的数组列表。

代码语言:javascript
复制
ArrayList <FunctionBlock> blocks = new ArrayList() ;

我可以随意添加和删除函数块。

我遇到的问题是我必须使用实例。例如。

代码语言:javascript
复制
    for (int i = 0; i < blocks.size(); i++)          // loop through all blocks
    {
        FunctionBlock block = blocks.get(i) ;        // declare a local function block

        if(block instanceof AND)    {    AND    and =   (AND) block ;   and.draw() ; }  // Can I do it differently?
        if(block instanceof OR)     {     OR     or =    (OR) block ;    or.draw() ; }
        if(block instanceof SR)     {     SR     sr =    (SR) block ;    sr.draw() ; }
        if(block instanceof DELAY)  {  DELAY  delay = (DELAY) block ; delay.draw() ; }
        if(block instanceof NOT)    {    NOT    not =   (NOT) block ;   not.draw() ; }
    }

每个单独的函数块都有一个draw()方法。对于我添加的每一个新块,我都需要更新这个列表。

我宁愿用这样的东西

代码语言:javascript
复制
   for (int i = 0; i < blocks.size(); i++)          // loop through all blocks
    {
        FunctionBlock block = blocks.get(i) ;        // declare a local function block

         block.draw() ;    // compiler error ==> The function draw() does not exist. 

在单个for-循环中,我想调用所有子类的draw()方法,而不必检查对象是什么。

这有可能吗?如果有,怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 12:24:23

发生此错误是因为FunctionBlock没有名为draw()的方法。将此方法添加到类FunctionBlock类中:

代码语言:javascript
复制
public abstract class FunctionBlock {
    /** Draws the block */
    public abstract void draw();
    ...

然后在子类中,将@Override注释添加到实现中:

代码语言:javascript
复制
@Override
public void draw() {
    ...
}

或者,您可以定义一个包含draw方法的接口,然后让您的FunctionBlock类实现它:

代码语言:javascript
复制
interface Drawable {
    /** Draws the block */
    void draw();
}

public abstract class FunctionBlock implements Drawable {

如果不是每个FunctionBlock类都定义了一个draw()方法,那么可以让各个子类实现接口。如果是这样的话,您只需将block类型更改为Drawable

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73621724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档