Java继承 - 找不到对象调用的方法?

时间:2013-02-09 16:59:16

标签: java inheritance methods

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

  1. 温度(超类)

  2. 天气(子类超类)

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

  4. 对于此程序,主要方法只应显示摄氏温度和风速。我不知道问题是什么..

    我的问题是在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");
    
        }
    }
    

5 个答案:

答案 0 :(得分:2)

班级Temperature不包含方法setWindSpeedgetWindSpeed。您需要创建一个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类确实没有getWindSpeedsetWindSpeed方法。只有子类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访问getWindSpeedTemperature。请记住,所有子类都是超类,但所有超类都不是子类。您需要在setWindSpeed中定义getWindSpeedTemperature

定义访问权限getWindSpeed和setWindSpeed之后。

Temperature t = new Weather();

t.setWindSpeed();等等。

也不要在Weather中将这些方法设为私有。只有在publicprotected或至少Temperature {。}}时,您才能访问它们。