2013-02-09 2 views
0

Для начала у меня есть три класса. Один называется:Наследование Java - не удается найти метод для вызова объекта?

  1. Температура (суперкласс)

  2. Погода (подкласс суперкласса)

  3. UseTemperature (подкласс, который содержит основной метод)

Для этой программы основной метод должен показывать температуру в градусах Цельсия и скорость ветра. Я не знаю, в чем проблема, но ..

Моя проблема заключается в том, что setWindSpeed ​​/ getWindSpeed ​​не может быть найден в UseTemperature.

//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

Вам необходимо объявить методы public/protected, которые вы хотите вызвать в другом месте. – Omar

+0

Это очень плохое использование наследования здесь. Он не выдерживает температуру _IS_A_. –

ответ

2

Класс Temperature не содержит методов setWindSpeed или getWindSpeed. Вам нужно будет создать объект Weather и сделать эти методы доступными для их вызова.

Weather myWeather = new Weather(); 
// set/get ... 
0

Либо вы должны объявить setWindSpeed ​​/ getWindSpeed ​​в классе tempaerature или сделать

Weather temp = new Weather(); 

причина, когда вы делаете

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

компилятор просто посмотреть, находится ли getWindSpeed ​​внутри класса температуры или не. Это не. Так оно дает ошибку компиляции

0

Temperature класс действительно не имеет getWindSpeed и setWindSpeed методов. Это только подкласс Weather, который получил эти методы. Суперклассы ничего не знают о подклассах. Вместо создания экземпляра Temperature создайте значение Weather

0

UseTemperature фактически не распространяется на Погода, и в любом случае он не сможет получить доступ к (private) методу setWindSpeed. Вы можете получить , если вы хотите сделать его вложенным классом (см. http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html), но это, вероятно, не очень хороший вариант дизайна.

Вместо этого, если UseTemperature предназначается, чтобы быть вашей точки доступа приложений и никогда не быть обработан (например, в фрагменте кода вы публикуемую), рассмотреть вопрос об изменении модификатора доступа setWindSpeed ​​к чему-то немного более разрешительный, как защищенный или даже по умолчанию. Это позволит вам получить к нему доступ из класса в одном пакете без необходимости подкласса.

Редактировать: также, как указывал Реймеус, объект погоды должен быть создан вместо температуры.

0

Как вы можете получить доступ к setWindSpeed и getWindSpeed от Temperature. Помните, что все подклассы являются суперклассом, но все суперклассы не являются подклассом. Вы должны определить setWindSpeed и getWindSpeed в Temperature.

После определения доступа getWindSpeed ​​и setWindSpeed, как это.

Temperature t = new Weather(); 

t.setWindSpeed(); и так далее.

Также не делайте эти методы частными в погоде. Вы можете получить к ним доступ только тогда, когда вы делаете их public или atleast protected в Temperature.

Смежные вопросы