有人可以解释如何调用某些方法而不调用它们吗?

时间:2017-08-31 06:15:37

标签: java inheritance

这是一个例子。运行代码时,将调用setup()draw()方法并影响程序。我不明白的是没有方法调用。

这是如何实现的?

import processing.core.PApplet;


public class MyDisplay extends PApplet {

    public void setup()
    {
        size(400, 400);
        background(200, 200, 200);

    }

    public void draw()
    {
        fill(255, 255, 0);
        ellipse(200, 200, 390, 390);
        fill(0, 0, 0);
        ellipse(120, 130, 50, 70);
        ellipse(280, 130, 50, 70);

        noFill();
        arc(200, 280, 75, 75, 0, PI);
    }

}

2 个答案:

答案 0 :(得分:3)

来自文档:

“程序启动时会调用setup()函数。”

和Draw():“在setup()之后直接调用,并连续执行其块中包含的代码行,直到程序停止或调用noLoop()。”

这是因为你的类扩展了PApplet而被调用。

您可以阅读有关函数here

的更多信息

答案 1 :(得分:2)

以下是一个简单的示例:

由于MyDisplay未定义任何构造函数,因此编译器将生成默认构造函数。这个构造函数就像:

public MyDisplay(){
    super();
}

因为需要生成超类,所以需要它。

如果我相信PApplet的文档说明

  

程序启动时调用setup()函数。

适用于draw

  

在setup()"

之后直接调用

构造函数可能看起来像(在简单版本中)

public class PApplet{
    public PApplet(){
        setup();
        draw();
    }

    public void setup(){}
    public void draw(){}
}

注意:那些代码不是真正的代码,它可能真的远非事实,但这是为了显示执行模式,而不是它背后的逻辑!

这意味着当构建MyDisplay实例时,它将自动调用将执行这两个方法的PApplet构造函数。在MyDisplay中覆盖的方法。

一个好的建议是将注释@Override添加到两个方法中,以便轻松注意从上面执行哪种方法,因为它们是定义和覆盖的。

public class MyDisplay extends PApplet {
    @Override
    public void setup()
    {
        ...
    }

    @Override
    public void draw()
    {
        ...
    }

}