2011-11-13 57 views
1

對於一個賦值,我需要在類java.awt.Point中創建一個類。我需要能夠在爲內部/嵌套類創建自己的變量時使用點方法。我有點困惑於靜態嵌套類和內部類之間的差異,不知道使用哪一個。我曾嘗試使用一個靜態嵌套類,並遇到了一個錯誤,指出「修改靜態這裏不允許」用Point作爲外部類編碼內部類

我的誤導性嘗試:

class Point { 
    static class RobotJAW { 

     int goldcollected, x, y; 

     RobotJAW() { 
      goldcollected = 0; 
      alive = true; 
      x = 0; 
      y = 0; 
     } 

    } 
} 

創建該類的點它有一個機器人搜索中黃金和炸彈領域,並在被炸彈摧毀的同時收集黃金。我只能使用java API中的Point和Scanner類。我需要使用點方法equals(obj),move(int x,int y),getLocation()和setLocation(int x,int y)。但我需要添加goldcollected和活着的變量。此外,這是學校的一項任務,所以我想獲得更多關於這個主題的知識,以及一些指導,而不是讓別人工作。

+0

歡迎,新用戶!從歷史上看,我們遇到了一些問題,只希望將代碼交給他們,所以很高興看到「我希望獲得關於該主題的更多知識,以及一些指導,而不必讓別人工作。」 – Pops

回答

0

有關內部類如何工作的教訓,然後有人懷疑這是你真正需要的。 內部類用於描述與另一個類具有極強歸屬關係的類。事實如此強烈,沒有外部階級就無法生存。如此強大,你很少需要它。內部類只能通過外部類的實例訪問:

public class A{ 
    public int value1; 
    public class B{ 
    public int value2; 
    } 
} 
... 
A a1 = new A() 
a1.value1 = 202 
A.B b1 = new a1.B(); 
System.out.println(b1.value1); //Prints 202 
A.B b2 = new B(); //Compiler error! Not allowed 

靜態內部類不是真正的內部類。它只是一個在內部類中定義的類。

它看起來對我來說,你想要的是RobotJaw要麼是一個點,或有一個點。你不希望它成爲一個點無法完全包含的對象。所以要麼RobotJaw擴展一個點,要麼包含一個點。

+0

如果RobotJAW的構造函數包含一個點,我仍然可以添加自己的變量,並仍然使用點對象的方法? – user1043550

+0

@ user1043550如果它包含一個點,則可以添加一個返回該點的.getLocation()方法,然後您可以對該點進行操作。當然,你可以添加任何你想要的RobotJAW本身,所以是的。 – heneryville

1

對於一個賦值,我需要在類java.awt.Point中創建一個類。

如果您擁有外部類的源代碼並且可以重新編譯它,那麼您只能在類中創建一個類。你不能這樣做java.awt.Point

如果你認爲你的任務是告訴你這樣做,你可能曲解你的任務是說。

當然,在Point內部創建一個嵌套類沒有多大意義。 AFAIK,沒有什麼(明智的)一個嵌套在Point中的類可以做到這一點,這是無法通過非嵌套類來完成的。也許作業是要求你extendPoint類;即創建一個子類而不是嵌套類。


(實際上,它在理論上是可能做到這一點,但不是純Java;例如

  • 你可以下載OpenJDK的源代碼,添加嵌套類java.awt.Point和重建,但你最終會得到的不是Java。

  • 您可以使用字節碼魔法來爲嵌套類構建一個類文件。如果你做得對,它會是可加載的,並且(我認爲)它將能夠訪問外部類的私有方法和屬性。但這不是純粹的Java。

兩種方法都是壞透的想法,而這幾乎肯定不是你的任務希望你做的事。)