“规范构造函数不能委托给另一个构造函数”是什么意思?

问题描述 投票:0回答:2

我是编程新手,正在遵循本 Java 天气 GUI 应用程序教程。以下是迄今为止我正在使用的极少量代码。我收到错误的地方是“super(“Weather App”);”线。

import javax.swing.*;

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui
    {
        //GUI and title
        super("Weather App");

        //kill app on closure
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //dimensions
        setSize(450, 650);

        //load gui to center screen
        setLocationRelativeTo(null);

        //manually position gui components
        setLayout(null);

        //no resizing
        setResizable(false);




    }
}

幕后发生了什么导致“规范构造函数无法委托给另一个构造函数”?如果 super 关键字意味着引用父类(在这种情况下为 JFrame)方法,并且这就是错误出现的地方...那么为什么 IntelliJ 会谈论构造函数,如果构造函数基本上只是保存对象属性(参数) )直到创建对象时调用构造函数并且对象获取其属性(参数)(通俗地说)。

java swing jframe
2个回答
0
投票

您必须将右括号添加到构造函数中。

喜欢:

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui()
    {
        //GUI and title
        super("Weather App");

    ...

而不是

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui
    {
        //GUI and title
        super("Weather App");

    ...


0
投票

构造函数应该在类名后面有一个参数列表。你应该写:

public WeatherAppGui() {
    // ...
}

注意类名称后面的括号。这是一个空的参数列表。

如果没有括号,编译器会将其解析为规范构造函数,这是记录类可以拥有的东西,但在像

WeatherAppGui
这样的常规类中不允许使用。所以错误消息有点令人困惑。

如果删除

super
构造函数调用,“WeatherAppGui”将突出显示为红色,并且 IntelliJ(不确定其他 IDE)会显示“预期参数列表”,这是一条更有用的错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.