java - 当具有父类(super class)时,类中的构造函数不能应用于给定类型

标签 java bluej

对不起,我是新手。 我目前正在使用 BlueJ 并在 Eclipse 上浏览 YouTube 教程,但我需要使用 BlueJ 来完成我的作业

我只需制作一个名为 GadgetShop 的 GUI(我已经完成了),它有一些按钮可以添加来 self 的 Mobile 和 MP3 类的信息。还有一个名为 Gadget 的类,它是父类(super class)。

所以我遇到的问题是 ArrayLists 并从类中收集信息以将其显示在我制作的文本框中。我创建了一个数组列表,但我不确定出了什么问题,因为它说 类 Gadget 中的构造函数 Gadget 无法应用于给定类型;

以下是 GadgetShop 中所需的代码:

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;

public class GadgetShop implements ActionListener
{
private JTextField model, price, weight, size, credit, memory, phoneNo, duration, download, displayNumber;
private JButton addMobile, addMP3, clear, displayAll;

//These JTextField's are for the labels
private JTextField model2, price2, weight2, size2, credit2, memory2, phoneNo2, duration2, download2, displayNumber2;

private JFrame frame;
private ArrayList<Gadget> gadgetDetails;

public GadgetShop()
{
    makeFrame();
}

public static void main (String args[]){ 
    ArrayList<Gadget> GadgetList = new ArrayList<Gadget>();
    Gadget Object = new Gadget();
    GadgetList.add(Object.Gadget(model, price, weight, size));
}

public void addGadget(Gadget newGadget)
{
    gadgetDetails = new ArrayList<Gadget>();
    gadgetDetails.add(newGadget);        
    model.setText("s6");

我的小工具是这样的:

/**
*  Gadget that is a super class for the Mobile Phone and MP3.
*  Needs input for the price, weight, model and size.
*/
public class Gadget
{
// Variables
public double price;
public int weight;
public String model;
public String size;

/**
 * Constructor for objects of class Gadget
 */
public Gadget(double ThePrice, int TheWeight, String TheModel, String TheSize)
{
    // initialise instance variables
    price = ThePrice;
    weight = TheWeight;
    model = TheModel;
    size = TheSize;
}

public double price()
{
   return price;
}

public int weight()
{
    return weight;
}

public String model()
{
    return model;
}

public String size()
{
    return size;
}

public void print()
{
   System.out.println("The price of the gadget is " + price + " pounds"); 
   System.out.println("The weight is " + weight + " grams");
   System.out.println("The model is " + weight); 
   System.out.println("The size is " + size);
}
}

它实际上意味着什么,以便我可以解决此问题,以及从我的类(class)收集信息以在单击按钮时输入到文本框中的建议方法是什么? (我知道如何在点击时激活按钮并添加信息,但只是不知道检索它的最佳方法)

感谢您的阅读,我想学习,所以这对我很有帮助。

最佳答案

您的 Gadget 构造函数采用参数:

public Gadget(double ThePrice, int TheWeight, String TheModel, String TheSize)
{
    // initialise instance variables
    price = ThePrice;
    weight = TheWeight;
    model = TheModel;
    size = TheSize;
}

您不能简单地调用new Gadget(),因为构造函数需要四个参数。您有两个选择:首先,您可以在 main 方法中提供参数:

public static void main (String args[]){ 
    ArrayList<Gadget> GadgetList = new ArrayList<Gadget>();
    Gadget object = new Gadget(1.00,20,"a model", "big");
    GadgetList.add(object);
}

替换任何有意义的值。另一个解决方案是创建另一个构造函数,它不接受 Gadget 类中的参数:

public Gadget() {
    //initialize values to default values
    price = 1.00
    weight = 21
    // etc.
}

您仍然需要稍微修复 main 方法:

public static void main (String args[]){ 
    ArrayList<Gadget> GadgetList = new ArrayList<Gadget>();
    Gadget object = new Gadget();
    GadgetList.add(object);
}

关于java - 当具有父类(super class)时,类中的构造函数不能应用于给定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051894/

相关文章:

java - 如何使 LIbgdx 中的像素更加可见?

java - 直到鼠标悬停或最小化窗口后,JComponent 才会出现,并且 JTextField 问题

java - BlueJ错误: incompatible types

java - BlueJ 中的常见错误,但尚未得到解决。与 括号相关

java - 运行Applet后没有任何显示

java - 如何在 Jetty 服务器中启用有线日志记录

java - 除了数据库默认位置之外,我如何在android中存储或获取sqlite数据库

java - Java Mac OSX native 外观和感觉是否尊重 UIManager 字体更改?

java - JAVA数组不保存值

java - 如何允许一个变量被各种函数使用? java