【问题标题】:Trouble when trying to extend class尝试扩展课程时遇到问题
【发布时间】:2013-10-05 23:55:31
【问题描述】:

我正在编写一个程序,它将获取一个临时和天的列表,并使用一个对象数组来实现该列表。每个对象将存储 temp(double) 和 day(string)。然后我们需要对对象进行排序并输出它们。我用两个变量、get/set 方法和一个构造函数创建了我的第一个类(DailyTemperature)。现在,当我在其中创建包含 ArrayList 的第二个类(DailyTemperatureList)时,在尝试添加到列表时出现错误,错误提示 “没有找到适合add(java.lang.String,double)方法的方法java.util.ArrayList.add(int,DailyTemperature)不适用(实际参数java.lang.String不能通过方法调用转换为int)方法 java.util.ArrayList.add(DailyTemperature) 实际上不适用,正式列表的长度不同。

我假设它是因为我试图使用 DailyTemperature 类中的变量。但是当我扩展它时,我得到一个错误,说类 DailyTemperature 中的构造函数 DailyTemperature 不能应用于给定类型。我不确定为什么。我不应该扩展,也许做点别的吗?

这是我的代码:

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class DailyTemperature 
{
     //variables
    private double temperature;
    private String day;

    //getTemp & setTemp methods
    public double getTemp()
    {
      return temperature;
    }

    public void setTemp(double newTemp)
    {
      temperature = newTemp;
    }

    //getDay & setTEmp methods
    public String getDay()
    {
      return day;
    }

    public void setDay(String newDay)
    {
      day = newDay;
    }


    public DailyTemperature(String day, double temperature) {

      this.day = day;
      this.temperature = temperature;
    }


}



import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class DailyTemperatureList extends DailyTemperature
{
    public static void main (String [] args) {


    ArrayList<DailyTemperature> dailytemps = new ArrayList<DailyTemperature>();

    dailytemps.add("Mon", 78.1);
}
}

【问题讨论】:

    标签: java arrays arraylist compiler-errors


    【解决方案1】:

    dailytemps 是ArrayList 的DailyTemperature。所以添加的时候需要添加DailyTemperature的实例:

    dailytemps.add(new DailyTemperature("Mon", 78.1));
    

    按照目前的实现,DailyTemperatureList 不需要扩展 DailyTemperature。

    【讨论】:

    • 扩展DailyTemperature时遇到的问题来自于在父类没有无参数构造函数时需要显式调用父类的构造函数。您需要有一个调用super(String, double) 的构造函数,但由于DailyTemperatureList 首先不应扩展DailyTemperature,这有点学术。
    • 我添加了 dailytemps.add(new DailyTemperature("Mon", 78.1));全部 5 天。天数/温度是否也保存在数组中,还是我需要创建一个数组将其链接到列表中?
    • @SophiaAli 我不知道你在哪里或为什么需要一个数组。 ArrayList(即dailytemps)在内部使用一个数组来存储内容,它只是没有被接口公开。如果你真的需要一个数组,你可以使用列表的toArray方法。
    【解决方案2】:

    没有 DailyTemperatureList 扩展 DailyTemperature。这不是继承的用途,因为某物的集合不是某物。您的继承没有通过“is-a”测试;例如,一个大学班级的学生并不是一个学生的更具体的概念。而是让第一个类包含第二个类的 ArrayList,或 ArrayList&lt;DailyTemperature&gt;。

    此外,ArrayList 有一个 add 方法,它接受一个参数,这里是您的 DailyTemperature 对象,或者接受一个 int 和一个对象,但不接受一个 String 和一个对象的方法。

    我还会让 DailyTemperature 实现 Comparable&lt;DailyTemperature&gt; 接口,以便可以轻松地对列表进行排序。

    【讨论】:

    • 如何实现可比较的 接口?所以在 DailyTemperatureList 类中将使用这一行 "dailytemps.add(new DailyTemperature("Mon", 78.1));"将元素添加到我可以排序的列表中?
    • @SophiaAli 实现Comparable 很有用,但你应该先让你的代码工作。要实现Comparable&lt;DailyTemperature&gt;,DailyTemperature 需要声明它实现了它,并且它需要实现int compareTo(DailyTemperature) 定义的Comparable。从tutorial 阅读有关实现接口的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多