0

したがって、クラスフィールドを返すこのメソッドを備えたこのクラス(「A」と呼びましょう)がget()あり、別のクラス(「B」)からアクセスしたいと考えています。重要: どちらのクラスもabstract. これらのクラスは同じですpackage(package privateすべてのABメンバー)。Mainクラスにはパッケージがありません (または、より良いのは、デフォルトのパッケージです) 。

【前:ねじれた無駄な説明】

BクラスからAget()メソッドにアクセスする必要があります。

試してみました:

1) 位置付けられたルート オブジェクトAobj.get()から始まる非静的呼び出しですが、静的呼び出しが必要なようです (奇妙なことに、どのメンバーも ではありません)。mainstatic

2)静的にアクセスしようとしましたが、Cannot make a static reference to the non-static fieldエラーが発生しました(もちろん)。

...だから私は立ち往生しており、まだアクセス構文エラーが発生しています。何か提案はありますか?

編集 :

だから私は終わりました。ここで、エラーを説明しようとします。

基本的Mainに、問題は、パッケージ内のクラスからクラス(デフォルトパッケージ)にあるオブジェクトにアクセスしたかったことでした。だから私は可視性の問題を抱えていました。

他の状況では、クラスをインポートすることで解決していましたが、デフォルトのパッケージにあるクラスをインポートできないことがわかったので、パッケージを作成し、クラスにクラスmainをインポートしました。MainB

私が犯し続けた最悪の間違いは、それ自体から開始にアクセスしなければならないと 考えていたことでした。main.main(String[])... etc ...Aobj main

実際、Stephen C が指摘したように:

これは、パッケージの状況に関係なく、また他のクラスを通過するパスに関係なく当てはまります。

最後に、コード例...正直に言うと、コードは私がこの質問を書いた日とは大きく異なります.成し遂げる。(私のせいです。)今回は自分自身をきちんと説明したかっただけです。

助けてくれたみんなに感謝します。

4

2 に答える 2

2

B のget()メソッドがそうでない場合、メソッドを呼び出す場合staticは のインスタンスが必要です。B例えば

  B b = ....
  b.get();

これは、パッケージの状況に関係なく、他のクラスなどを経由するパスに関係なく当てはまります。(あなたの「散文」の説明を完全に理解しているかどうかはわかりませんが...)

于 2016-07-16T03:34:42.263 に答える
2

あなたが説明したことから(コードなしで)、のインスタンスにアクセスする必要がありますb。これにはいくつかの方法があります。問題のメソッドが呼び出しごとAに異なるインスタンスを使用できる場合は、そのメソッドに引数を追加するだけです。BB

public class B {

    public int get() { //Or whatever the return type of get is
        //...
    }

}

public class A {

    public int methodThatNeedsABInstance(B instance) {
        int x = instance.get(); //Can call get method
    }

}

次に、次のように呼び出されます。

B b = new B();
A a = new A();
a.methodThatNeedsABInstance(b);

Aインスタンスがすべての呼び出しに同じBインスタンスを使用する必要がある場合は、それを type のフィールドにしますB

public class A {

    private B instance;

    //Constructors, setters and getters for b as necessary    

    public int methodThatNeedsABInstance() {
        int x = instance.get(); //Can call get method
    }

}
于 2016-07-16T03:35:36.580 に答える