Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有人能解释一下某些方法是如何在不被调用的情况下被调用的吗?_Java_Inheritance - Fatal编程技术网

Java 有人能解释一下某些方法是如何在不被调用的情况下被调用的吗?

Java 有人能解释一下某些方法是如何在不被调用的情况下被调用的吗?,java,inheritance,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

这里有一个例子。运行代码时,将调用
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);
    }

}
从文档中:

“程序启动时,setup()函数只调用一次。”

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

调用此函数是因为您的类扩展了PApplet

您可以从以下文档中了解有关函数的更多信息:

“程序启动时,setup()函数只调用一次。”

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

调用此函数是因为您的类扩展了PApplet


您可以阅读有关函数的更多信息

以下是一个简单的示例:

由于
MyDisplay
没有定义任何构造函数,编译器将生成默认构造函数。此构造函数将类似于:

public MyDisplay(){
    super();
}
它是必需的,因为需要生成超类

如果我相信PApplet的文档说明

当程序启动时,setup()函数被调用一次

对于
绘图

在setup()之后直接调用

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

注意:这些代码不是真实的,可能与事实相去甚远,但这是为了显示执行模式,而不是背后的逻辑

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

一个好的建议是将注释
@Override
添加到这两个方法中,以便容易地注意到可以从上面执行的方法,因为这些方法是定义和重写的

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

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

}

下面是一个简单的例子:

由于
MyDisplay
没有定义任何构造函数,编译器将生成一个默认构造函数。此构造函数类似于:

public MyDisplay(){
    super();
}
它是必需的,因为需要生成超类

如果我相信PApplet的文档说明

当程序启动时,setup()函数被调用一次

对于
绘图

在setup()之后直接调用

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

注意:这些代码不是真实的,可能与事实相去甚远,但这是为了显示执行模式,而不是背后的逻辑

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

一个好的建议是将注释
@Override
添加到这两个方法中,以便容易地注意到可以从上面执行的方法,因为这些方法是定义和重写的

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

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

}

javadoc对此进行了解释。读它:我读过它,但以我的经验来看,它几乎毫无意义。如果可能的话,我会很感激简化一个简单的技巧,当你扩展一个类时,请记住,它不仅仅是你所看到的。构造函数将在超类中被调用,它可以做“任何事情”。通常,向每个被重写的方法(如
setup
draw
)添加
@Override
注释有助于记住这些方法可以从超类访问(因为在超类或更高级别中定义)。好的,但在本例中,我假设setup()和draw()是方法不存在于超类中,因为不存在@Override correct?@LinuxOracleUser方法,因此可以省略
@Override
注释,编译器不会对此进行抱怨。但是,大多数IDE都会添加注释,javadoc对此进行了解释。读它:我读过它,但以我的经验来看,它几乎毫无意义。如果可能的话,我会很感激简化一个简单的技巧,当你扩展一个类时,请记住,它不仅仅是你所看到的。构造函数将在超类中被调用,它可以做“任何事情”。通常,向每个被重写的方法(如
setup
draw
)添加
@Override
注释有助于记住这些方法可以从超类访问(因为在超类或更高级别中定义)。好的,但在本例中,我假设setup()和draw()是方法不存在于超类中,因为不存在@Override correct?@LinuxOracleUser方法,因此可以省略
@Override
注释,编译器不会对此进行抱怨。但是,大多数IDE都会添加注释。这仍然不能解释方法是如何被调用的。这仍然不能解释方法是如何被调用的。