0

で同じメソッドが利用できる場合、どのようにしてclass Bfromのメソッドを呼び出すことができますか? に入っています。Package.oneclass BPackage.twomain()class RunABPackage.two

Package
 |-----one
 |      |---A.java (interface)
 |      |---B.java (implements A)
 |-----two
        |---B.java (implements A)
        |---RunAB.java

//Package.one ディレクトリ

package Package.one;

public interface A {
    int area(); 
}

.

package Package.one;

public class B implements A {
    public int width;
    public int height;

    public int area() {
        System.out.println("i am form one");
        return width*height;
    }

    public B(int a, int b) {
        width = a;
        height = b; 
    }
}

//Package.two dir

package Package.two;

import Package.one.*;

class B implements A {
    public int width;
    public int height;

    public int area() {
        System.out.println("i am form two");
        return width*height;
    }

    public B(int a, int b) {
        width = a;
        height = b; 
    }
}

.

package Package.two;
import Package.one.*;


class RunAB {
    public static void main(String args[]) {
        B b = new B(10,12);
        System.out.println("area is " + b.area());

    }
}

///出力;

i am form two
area is 120

Java は、パッケージ 1 からではなく、パッケージ 2 からメソッドを呼び出す必要があることをどのように認識しますか? interface Aこの呼び出しプロセス (決定)に何か役割はありますか?

4

3 に答える 3

4

完全修飾名を使用します。

public static void main(String args[]) {
    Package.one.B b = new Package.one.B(10,12);
    System.out.println("area is " + b.area());
}

2 番目の質問に対処するには、次のコードを実行します。

public static void main(String args[]) {
    pack.one.B bFromOne = new pack.one.B(10,12);
    System.out.println(bFromOne.area());
    pack.two.B bFromTwo = new pack.two.B(10,12);
    System.out.println(bFromTwo.area());
}

そのクラスが別のインポートによって隠されている場合は、完全修飾名のみを使用する必要があります。


今後は、Java の命名規則を尊重し、パッケージを小文字で始めるようにしてください。

于 2013-07-10T19:19:50.090 に答える
1

package.one.Bは静的ではないため、 package.one.Bfirst のインスタンスを取得する必要があります。完全修飾クラス名を使用します。

package.one.B myBOne=new package.one.B(16,24);
System.out.println("area is " + myBOne.area());

静的メソッドを呼び出す場合は、完全修飾名の後にメソッド名が続きます。

使用package.one.Bする静的メソッドがある場合staticFoo(package.one.B.staticfoo()

これらのクラスがインターフェースを実装する場合、それらは互いに独立して実装するため、他のクラスもそれを実装していることを認識する必要はありません。

于 2013-07-10T19:20:24.390 に答える
1

インポートしないでください。別のパッケージからオブジェクトを作成するときは、コードで次の形式を使用します

Package.one.A a = new Package.one.A();
于 2013-07-10T19:21:07.163 に答える