0

当相同的方法在in 中可用时,我如何调用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 目录

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 怎么知道它需要从包二而不是包一中调用方法?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());
}

解决您的第二个问题,运行以下代码:

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.B。我们使用完全限定的类名:

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 回答