我正在用Java/Processing中的函数块制作一个GUI。
我有一个通用类,它有管理X和Y坐标的方法。所有块都是从普通类继承的。
这允许我创建一个单独的数组列表。
ArrayList <FunctionBlock> blocks = new ArrayList() ;我可以随意添加和删除函数块。
我遇到的问题是我必须使用实例。例如。
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()方法。对于我添加的每一个新块,我都需要更新这个列表。
我宁愿用这样的东西
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()方法,而不必检查对象是什么。
这有可能吗?如果有,怎么做?
发布于 2022-09-06 12:24:23
发生此错误是因为FunctionBlock没有名为draw()的方法。将此方法添加到类FunctionBlock类中:
public abstract class FunctionBlock {
/** Draws the block */
public abstract void draw();
...然后在子类中,将@Override注释添加到实现中:
@Override
public void draw() {
...
}或者,您可以定义一个包含draw方法的接口,然后让您的FunctionBlock类实现它:
interface Drawable {
/** Draws the block */
void draw();
}
public abstract class FunctionBlock implements Drawable {如果不是每个FunctionBlock类都定义了一个draw()方法,那么可以让各个子类实现接口。如果是这样的话,您只需将block类型更改为Drawable
https://stackoverflow.com/questions/73621724
复制相似问题