2011-12-13 23 views
2
public class PolyMorphic { 

public static void main(String[] args) { 

    PolyMorphic.printNumber(new IntNumber(1)); 
    PolyMorphic.printNumber(new DoubleNumber(4.54)); 

} 

public static void printNumber(MyNumber N) { 
    N.print(N); 
    System.out.println(); 
} 

public abstract class MyNumber{ 
    abstract void print(MyNumber N); 
} 

public class IntNumber extends MyNumber{ 
    int x; 

    IntNumber(){ 
     x = 3; 
    } 

    IntNumber(int x){ 
     this.x = x; 
    } 


    void print(MyNumber N) { 
     double temp = (double)x; 
     System.out.printf("%.2f",temp); 

    } 
} 


public class DoubleNumber extends MyNumber{ 
    double x; 

    DoubleNumber(){ 
     x = 3.23; 
    } 

    DoubleNumber(double x){ 
     this.x = x; 
    } 


    void print(MyNumber N) { 
     double temp = x; 
     System.out.printf("%.2f",temp); 

    } 
} 

} 

所以我想創建一個名爲printNumberPolyMorphic類,這是polymorphic並可打印(控制檯)的方法要麼保留兩位小數到intNumber右邊或右邊有三位小數的DoubleNumber。如PolyMorphic.printNumber(new IntNumber(1));態類/多態性/嵌套類-Getting錯誤信息

我的問題是這樣的:

上的線條:

PolyMorphic.printNumber(new IntNUmber(1)); 
PolyMorphic.printNumber(new DoubleNumber(4.54)); 

這是錯誤消息:

「類型多態的沒有外圍實例是可訪問的必備 使用一個封閉的PolyMorphic實例 (egxnew A()其中x是多態的一個實例)來限定分配。「

它給了我這兩個實例,我很困惑,爲什麼它不工作。如果有人能指出我朝着正確的方向,我會非常感激。

謝謝。

+0

可能重複的[Java - 沒有可以訪問Foo類型的封閉實例](http:// stackoverflow。com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian

回答

1

由於您聲明它們的方式,您的內部類需要您的PolymorphicClass實例。然而,在你的情況,你不需要這個,所以你可以標記你的內部類爲static

public static class IntNumber 

public static class DoubleNumber 

這是一個Java的設計特點。

另外一個解決辦法是對的PolymorphicClass一個實例進行操作:

Polymorphic p = new Polymorphic(); 
p.printNumber(new IntNumber(1)); 
p.printNumber(new DoubleNumber(4.54)); 

編輯:

您還需要:

public static abstract class MyNumber 
+0

對不起,網站新手,只是急於獲得解決方案。感謝您的幫助,並及時回覆。 – sealsix

1

不嵌套你mynumber的類及其在多形態裏面的女兒。當嵌套類(MyNumberIntNumberDoubleNumber)是封閉類(Polymorphic)的實現的一部分

嵌套類等,這只是合適的。在你的情況下,兩個類之間唯一的關係是Polymorphic正在調用Number類的方法。

順便說一句,編譯器已經告訴過你一個解決問題的辦法,如果你不厭其煩地閱讀和理解它所說的話。不勝感激,因爲很少有編譯器是非常重要的。

編輯 - 爲什麼任何人都低調回復,這是正確的,並添加額外的信息,由其他答案提供的?

+0

必須這樣做,教授特意這樣想,我知道它告訴我該怎麼做,但我無法完成它,我已經連續兩天完成了其他決賽,這是最後一件事情給我帶來了麻煩,實際上不應該是這樣。 – sealsix

+2

告訴教授見我。 –

+0

儘管如此,保持類嵌套,但聲明它們是靜態的,正如其他海報的建議,將實現一個工作解決方案 - 但不是很好的設計。 –