首先,我有三节课。一个叫:
温度(超类)
天气(子类超类)
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");
}
}
答案 0 :(得分:2)
班级Temperature
不包含方法setWindSpeed
或getWindSpeed
。您需要创建一个Weather
对象,并使这些方法可以调用它们。
Weather myWeather = new Weather();
// set/get ...
答案 1 :(得分:0)
您需要在tempaerature类中声明setWindSpeed / getWindSpeed或执行
Weather temp = new Weather ();
原因是你做的时候
Temperature temp;
temp = new Temperature ();
temp.getWindSpeed()
编译器只是看看getWindSpeed是否位于Temperature类内。它不是。所以它给出了编译错误
答案 2 :(得分:0)
Temperature
类确实没有getWindSpeed
和setWindSpeed
方法。只有子类Weather
才能获得这些方法。超类对子类一无所知。而不是创建Temperature
的实例,而是创建Weather
答案 3 :(得分:0)
UseTemperature实际上并没有扩展Weather,无论如何它都无法访问(私有)setWindSpeed方法。如果要将它作为嵌套类,可以访问它(有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html),但它可能不是一个好的设计选项。
相反,如果UseTemperature是您的应用程序访问点并且永远不会被实例化(例如在您发布的代码段中),请考虑将setWindSpeed的访问修饰符更改为更宽松的内容,例如 protected 甚至默认。这将允许您从同一个包中的类访问它,而不必将其子类化。
编辑:同样,正如Reimeus指出的那样,必须实例化Weather对象而不是Temperature对象。
答案 4 :(得分:0)
如何从setWindSpeed
访问getWindSpeed
和Temperature
。请记住,所有子类都是超类,但所有超类都不是子类。您需要在setWindSpeed
中定义getWindSpeed
和Temperature
。
定义访问权限getWindSpeed和setWindSpeed之后。
Temperature t = new Weather();
t.setWindSpeed();
等等。
也不要在Weather中将这些方法设为私有。只有在public
中protected
或至少Temperature
{。}}时,您才能访问它们。