如何在以下上下文中调用具有相同名称的其他方法形成其他包

时间:2013-07-10 19:18:15

标签: java interface package

如果class B中的Package.one提供了相同的方法,如何从class B调用Package.two的方法? main()位于class RunAB的{​​{1}}。

Package.two

// Package.one dir

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

package Package.one;

public interface A {
    int area(); 
}

// Package.two dir

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 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());

    }
}

Java如何知道它需要从第二个包而不是第一个包调用方法? i am form two area is 120 在此调用过程(决策)中是否有任何角色?

3 个答案:

答案 0 :(得分: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命名约定,并以小写字母开头。

答案 1 :(得分: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()

当这些类实现接口时,它们彼此独立地执行,并且不需要知道另一个也在实现它。

答案 2 :(得分:1)

不要导入它。从其他包创建对象时,请在代码中使用以下格式

Package.one.A a = new Package.one.A();