如果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
在此调用过程(决策)中是否有任何角色?
答案 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();