2015-06-20 97 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的呼叫。 一切都很好..谢谢你哟! :) –