-4

オブジェクト指向プログラミングに関して非常に基本的な質問があります。

Class1 と Class2 の 2 つのクラスがあります。Class2 から Class1 の getter を呼び出す必要があります (コードを参照してください)。問題は、以下に示すコードをコンパイルできないことです。Class2 から Class1 の getter を呼び出せるようにこのコードを変更する方法。では、この問題に取り組む正しい方法は何ですか?

PS関数getVar1を静的にすると、コンパイラはそれreturn this.var1が正しくないと言います。

public class Class1 
{
    private int var1;

    public Class1(int index1, int index2) 
    {
      //...
      Class2 c2 = new Class2();
      //..
    }

    public int getVar1()
    {
      return this.var1;
    }
}


import Class1;

public Class2
{
    public Class2() 
    {
      //...
      int var = Class1.getVar1(); // !!!
    }
} 
4

5 に答える 5

1

まず第一にpublic Class2すべきことpublic class Class2

次に、静的に変更getVar1する場合は、静的にも変更var1する必要があります (理由は、静的関数から非静的メンバーに直接アクセスできないためです)。

それ以外の場合は、のインスタンスを作成し、そのインスタンスClass1を呼び出しgetVar1()ます

于 2013-04-09T09:19:37.663 に答える
1
  • Class1 static なしのメソッドを呼び出すには、そのクラスのインスタンスが必要です。

関数 getVar1 を静的にすると、コンパイラは return this.var1 が正しくないと言います。

var1当然 static ではないためです。次のようなエラーが発生します。

静的コンテキストでは非静的メソッドにアクセスできません

それはあなたにヒントを与えるはずです。

class Class2{
   //pass the instance of Class1 to Class2
   public Class2(Class1 class1){
      class1.getVar1(); //invoke method here
   }

}
于 2013-04-09T09:18:52.153 に答える
0

私はあなたが探しているものを理解していませんでした。しかし、とりあえず変更を加えました。

public class Class1 {
    private int var1;

    public Class1() {
    }

    public Class1(int index1, int index2) {
        // ...
        Class2 c2 = new Class2();
        // ..
    }

    public int getVar1() {
        return this.var1;
    }
}

import Class1;
public class Class2 {
    public Class2() {
        // ...
        int var = new Class1().getVar1(); // !!!
    }
}
于 2013-04-09T09:24:41.993 に答える
0
new Class1().getVar1();

インスタンスを作成していません。インスタンス変数またはメソッドを使用する前にインスタンスを作成してください。

于 2013-04-09T09:17:54.943 に答える
-1

Class1はstaticではないため、インスタンスを作成するだけでその変数と関数にアクセスできます。

int var = new Class1.getVar();

または make class1getVar1および静的var1として

public static class1 {
    private static int var1;

    public Class1(int index1, int index2)  {
        //...
        Class2 c2 = new Class2();
        //..
    }

    public static int getVar1() {
        return var1;
    }
}
于 2013-04-09T09:25:24.543 に答える