2015-06-20 81 views
0

我有一個超看到子類方法

class Game {} 

class Game1 extends Game{} 

class Game2 extends Game1{ 
    void method1(){}; 
} 

但是當我做,

Game game = new Game2(); //compiles fine and all is ok 
game.method1(); //gives me error method1 is not defined for type Game 

我怎麼能解決這個問題?遊戲是超級超級類..

+0

請顯示的代碼你遺產。你是否從你的每個構造函數調用super()? – user3337714

+0

您應該閱讀一些關於繼承的教程,例如[這一個](https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)。 – Turing85

+1

@ user3337714 *「你是否從你的每個構造函數調用super()?」*爲什麼她應該手動執行該操作? – Tom

回答

1

如果您需要調用子類中的方法來將變量轉換爲超類,那麼您需要將它轉換回子類。在另一方面,如果Game對象需要知道一個Game2對象的方法,也許你應該宣佈遊戲與抽象方法的抽象類遊戲2和的Game1必須實現:

public abstract class Game { 
    public abstract void method1(); 
} 

public class Game1 extends Game { 
    public void method1() { 
     // ... 
    } 
} 

public class Game2 extends Game { 
    public void method1() { 
     // ... 
    } 
} 
+0

謝謝...有一個神的日子! –

+0

一個問題,如果Game1實現void method1()和Game2 doesnt 是否會在編譯時出錯? ,因爲我仍然不明白爲什麼我應該通過在子類中強制實現一個方法,如果父類已經擁有它,我可以從子調用....這是繼承的完美之美否? :) –

+0

我明白了。工作正常:)一個摘要,擴展名1和另一個擴展名2.在擴展名1中實施的方法;來自類型爲abstract = new extension2的擴展2的呼叫。 一切都很好..謝謝你喲! :) –