-1

たとえば、私は持っていA.javaます。私がA.java持っている:

public class A {
  // normal 
}

class B {  // cannot declare: public class B

}

そして、と同じパッケージでA.java。私は作成C.javaして宣言します:

public class C {
  public void methodC() {  
      A a = new A(); 
      B b = new B(); // no error -> B is a public class
  }
}

ファイルに新しいクラスBを作成した場合C.javaC.javaCは、ファイルではなく、ファイル内のクラスBを参照しますA.java

class B {
}
public class C {
  public void methodC() {
      B b = new B(); //this B refer to C.java rather than A.java
  }
}

それで、私はここでいくつかの問題を見ました:同じパッケージに、2つの同じクラスがあります。それで、私が作成するときD.java、どのクラスBが参照されるかをどうやって知ることができますか?

また、クラスAとクラスCの外で宣言した場合、実際のクラスBの種類は何かという質問があります。この点で、私は非常にイライラします。

ありがとう :)

4

4 に答える 4

4

あなたがすでにこれを行っていたときA.java

public class A {
  // normal 
}

class B {  // cannot declare: public class B

}

同じパッケージにすでに存在するため、同じパッケージでclass B同じものを定義することはできませんC.java

class B {            //You won't be able to do this as same class in package exists

}
public class C {
  public void methodC() {
      B b = new B(); //this B refer to C.java rather than A.java
  }
}

私が試したことは以下のとおりで、これを示しています。

ここに画像の説明を入力してください

于 2012-12-12T15:03:38.563 に答える
1

最後のコードスニペット(Bをパブリックとして宣言)でタイプミスをしたと思います。ただし、重要なことは、パッケージ内で同じ名前の2つのクラスを定義できないことです。コンパイラエラーがスローされます。IDEでこれを試しましたが、クラスBがすでに定義されているため、プロジェクトはあいまいさがあることを示しています。

于 2012-12-12T14:48:58.533 に答える
1

重複するクラス定義を取得します。A.javaはA.classとB.classにコンパイルされます。C.javaをコンパイルすると、エラーが発生するか、B.classが上書きされます。

Bクラスはパブリックではなく、パッケージローカルであるため、同じパッケージ内のクラスでのみ使用できます。

BForAとBForCなどの別々のクラスを作成してみませんか?何かを再利用したい場合は、共有のAbstractB親クラスを作成します。

于 2012-12-12T14:49:47.553 に答える
1

クラスAで定義されているクラスBはパブリックではなく、パッケージプライベートであり、定義されているパッケージ内でのみ表示されます。

クラスD内でクラスBも定義すると、エラーが発生します。タイプBはすでに定義されています。

于 2012-12-12T14:50:59.563 に答える