0

首先,我有三门课。一个叫:

  1. 温度(超类)

  2. 天气(子类超类)

  3. UseTemperature(包含 main 方法的子类)

对于这个程序,主要方法应该只显示摄氏温度和风速。虽然不知道是什么问题。。

我的问题是在 UseTemperature 中找不到 setWindSpeed/getWindSpeed。

//TEMPERATURE:

public class Temperature
{
    private double degrees;


    public void setDegrees (double degrees)
    {
        this.degrees = degrees;
    }


    public double getDegrees ()
    {
        return degrees;
    }

/////////////////////////////////////////////////////////////////////////////////////////
//WEATHER:

public class Weather extends Temperature
{
    private double windspeed; // Number + km/h

    private void setWindSpeed (double windspeed) //setter
    {
        this.windspeed = windspeed;
    }


    public double getWindSpeed ()  //getter
    {
        return windspeed;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
//USE TEMPERATURE:

class UseTemperature // can be public but makes no diffrence
{
    public static void main (String args[])
    {
        Temperature temp;

        temp = new Temperature ();

        temp.setDegrees (40.0);      
        temp.setWindSpeed (70.0); // NOT FOUND IN TEMPERATURE

        System.out.print (temp.getDegrees ());
        System.out.print (" degrees ");

        System.out.println (temp.getWindSpeed()); // NOT FOUND IN TEMPERATURE
        System.out.println (" km/h");

    }
}
4

5 回答 5

2

该类Temperature不包含方法setWindSpeedgetWindSpeed. 您需要创建一个Weather对象并使这些方法可以访问以调用它们。

Weather myWeather = new Weather();
// set/get ...
于 2013-02-09T17:04:02.607 回答
0

您需要在温度类中声明 setWindSpeed/getWindSpeed 或执行

Weather temp = new Weather ();

原因是当你这样做

Temperature temp;
 temp = new Temperature ();
 temp.getWindSpeed()

编译器只是查看 getWindSpeed 是否位于 Temperature 类中。它不是。所以它给出了编译错误

于 2013-02-09T17:04:20.983 回答
0

Temperature类确实没有getWindSpeedsetWindSpeed方法。只有子类Weather拥有这些方法。超类对子类一无所知。与其创建 的实例,不如创建 的Temperature实例Weather

于 2013-02-09T17:04:29.033 回答
0

UseTemperature 实际上并没有扩展 Weather,无论如何它都无法访问(私有)setWindSpeed 方法。如果要将其设为嵌套类,则可以访问它(有关详细信息,请参见http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html),但这可能不是一个好的设计选项。

相反,如果 UseTemperature 旨在成为您的应用程序访问点并且永远不会被实例化(就像在您发布的代码段中一样),请考虑将 setWindSpeed 的访问修饰符更改为更宽松的内容,例如protected甚至default。这将允许您从同一包中的类访问它,而无需对其进行子类化。

编辑:另外,正如 Reimeus 所指出的,必须实例化一个 Weather 对象而不是 Temperature 对象。

于 2013-02-09T17:07:26.240 回答
0

您如何访问setWindSpeedgetWindSpeedTemperature. 请记住,所有子类都是超类,但所有超类都不是子类。您需要在 中定义setWindSpeed和。getWindSpeedTemperature

像这样定义访问 getWindSpeed 和 setWindSpeed 之后。

Temperature t = new Weather();

t.setWindSpeed();等等。

也不要在 Weather 中将这些方法设为私有。只有当您制作它们public或至少protectedTemperature.

于 2013-02-09T17:07:35.913 回答