0

まず、3つのクラスがあります。1 つは次のように呼ばれます。

  1. 温度 (スーパークラス)

  2. 天気 (サブクラス スーパークラス)

  3. UseTemperature (main メソッドを保持するサブクラス)

このプログラムの主な方法は、摂氏温度と風速を表示することだけを想定しています。何が問題なのかわからないけど..

私の問題は、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");

    }
}
4

5 に答える 5

2

クラスにメソッドまたはTemperatureが含まれていません。オブジェクトを作成し、それらのメソッドを呼び出してアクセスできるようにする必要があります。setWindSpeedgetWindSpeedWeather

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

UseTemperature は実際には Weather を拡張していません。とにかく、(プライベート) setWindSpeed メソッドにアクセスすることはできません。ネストされたクラスにする場合はアクセスできますが (詳細については、http ://docs.oracle.com/javase/tutorial/java/javaOO/nested.htmlを参照してください)、おそらく適切な設計オプションではありません。

代わりに、 UseTemperature がアプリケーション アクセス ポイントであり、インスタンス化されないことを意図している場合 (投稿したスニペットのように)、 setWindSpeed のアクセス修飾子を、protecteddefaultなど、もう少し寛容なものに変更することを検討してください。これにより、サブクラス化することなく、同じパッケージ内のクラスからアクセスできます。

編集: また、Reimeus が指摘したように、Temperature の代わりに Weather オブジェクトをインスタンス化する必要があります。

于 2013-02-09T17:07:26.240 に答える
0

setWindSpeedgetWindSpeedからどのようにアクセスできますかTemperature。すべてのサブクラスはスーパークラスですが、すべてのスーパークラスはサブクラスではないことに注意してください。setWindSpeedでとgetWindSpeedを定義する必要がありますTemperature

アクセス getWindSpeed と setWindSpeed を次のように定義した後。

Temperature t = new Weather();

t.setWindSpeed();等々。

また、これらのメソッドを Weather でプライベートにしないでください。publicそれらを作成した場合、または少なくともprotectedでのみアクセスできますTemperature

于 2013-02-09T17:07:35.913 に答える
0

tempaerature クラスで setWindSpeed/getWindSpeed を宣言するか、または行う必要があります。

Weather temp = new Weather ();

理由はあなたがするときです

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

コンパイラは getWindSpeed が Temperature クラス内にあるかどうかを確認するだけです。そうではありません。したがって、コンパイルエラーが発生します

于 2013-02-09T17:04:20.983 に答える
0

TemperaturegetWindSpeedクラスには確かにandsetWindSpeedメソッドがありません。Weatherこれらのメソッドを持つのはサブクラスだけです。スーパークラスはサブクラスについて何も知りません。のインスタンスを作成する代わりに、のインスタンスを作成しTemperatureますWeather

于 2013-02-09T17:04:29.033 に答える