Java继承-找不到要在对象上调用的方法?
首先,我有三节课。其中一个是:Java继承-找不到要在对象上调用的方法?,java,inheritance,methods,Java,Inheritance,Methods,首先,我有三节课。其中一个是: 温度(超类) 天气(子类超类) UseTempture(保存main方法的子类) 对于该程序,主要方法仅应以摄氏度和风速显示温度。但是我不知道问题出在哪里 我的问题是在UseTimperature中找不到setWindSpeed/getWindSpeed。 //TEMPERATURE: public class Temperature { private double degrees; public void setDegrees (doub
//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");
}
}
类
Temperature
不包含方法setWindSpeed
或getWindSpeed
。您需要创建一个Weather
对象,并使这些方法可以访问以调用它们
Weather myWeather = new Weather();
// set/get ...
您需要在TEMPAVALIURE类中声明setWindSpeed/getWindSpeed,或者
Weather temp = new Weather ();
原因是当你这样做的时候
Temperature temp;
temp = new Temperature ();
temp.getWindSpeed()
编译器只需查看getWindSpeed是否位于Temperature类内部。事实并非如此。因此它给出了编译错误
温度
类确实没有getWindSpeed
和setWindSpeed
方法。只有子类Weather
拥有这些方法。超类对子类一无所知。与其创建温度
的实例,不如创建天气的实例
使用温度实际上并没有扩展天气,而且无论如何它将无法访问(私有)setWindSpeed方法。如果要使其成为嵌套类,则可以访问它(有关详细信息,请参见),但这可能不是一个好的设计选项
相反,如果UseTemperature是你的应用程序访问点,并且永远不会被实例化(比如在你发布的代码段中),考虑将SETWORKSTEEP的访问修饰符更改为更许可的东西,比如受保护甚至默认。这将允许您从同一个包中的类访问它,而无需对其进行子类化
编辑:正如Reimeus指出的,必须实例化天气对象而不是温度对象。如何从
温度
访问设置风速
和获取风速
。记住,所有的子类都是超类,但所有的超类都不是子类。您需要在Temperature
中定义setWindSpeed
和getWindSpeed
在定义access之后,像这样设置getWindSpeed和setWindSpeed
Temperature t = new Weather();
t.设置风速()代码>等等
也不要让这些方法在天气条件下成为私人的。只有在Temperature
中将它们设置为public
或至少设置为protected时,才能访问它们。您需要声明要在其他地方调用的public/protected方法。这是继承的一个非常糟糕的用法。它不认为天气就是温度。