2013-07-10 53 views
0

如何在Package.two中使用class B中的相同方法從Package.one中調用class B的方法? main()位於Package.twoclass RunAB如何在以下上下文中調用具有相同名稱的其他方法的其他方法

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

DIR

package Package.one; 

public interface A { 
    int area(); 
} 

//Package.one。

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

    } 
} 

/// output;

i am form two 
area is 120 

Java如何知道它需要從包2而不是從包1調用方法?這個調用過程(決定)中是否有interface A的作用?

回答

4

使用完全合格的名稱:

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

Adressing你的第二個問題,運行此代碼:

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命名約定,讓您的軟件包以小寫字母開頭。

+0

我真的不知道有關包的命名約定。但我現在講講課程和方法。他們是否正確。謝謝 – netsmertia

+0

@netsmertia:是的,你所有的名字都遵循命名規則。包名「Package」開頭的大寫字母「P」是唯一的錯誤。 – jlordo

+0

感謝它。我喜歡遵循約定,但是對於Java來說是新的。我是PHP形式的背景。是否有任何答案如何知道(第二個問題) – netsmertia

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.BstaticFoo(我們會使用package.one.B.staticfoo()

一個靜態方法。當這些類implememt他們如此互相獨立做,不需要知道對方也正在實施它的接口。

+0

好的,我試過了'B b = new package.one.B(16,24)',但不知道左手邊'package.one.B b'謝謝 – netsmertia

+0

@netsmertia你試過的東西shouldn因爲package.one.B不會擴展package.two.B。 – hexafraction

+0

所以沒有完全合格的類名'B b'。 java認爲它在當前包'package.two'中,而在右側我用'package.one'指定了一個對象。 – netsmertia

1

不要導入它。當從不同的包中創建對象時,請在代碼中使用以下格式

Package.one.A a = new Package.one.A(); 
相關問題