Java 从其他类运行抽象方法

Java 从其他类运行抽象方法,java,abstract-class,Java,Abstract Class,我正在做一个项目,为了便于使用,我希望能够创建一个扩展“Screen”接口的类,然后从我的主方法初始化Screen类,如下所示- //Screen Interface public abstract interface Screen { public abstract void init(); } //Screen Implementation public class Game implements Screen { @Override public void in

我正在做一个项目,为了便于使用,我希望能够创建一个扩展“Screen”接口的类,然后从我的主方法初始化Screen类,如下所示-

//Screen Interface
public abstract interface Screen {
    public abstract void init();
}

//Screen Implementation
public class Game implements Screen {

    @Override
    public void init() {
        //Do stuff
    }
}

//Main class
public class Main {

    public static void main(String[] args) {
        Screen s = new Screen();
        s.init();
    }
}
但这不起作用,因为您无法实例化抽象类。我会尽力的

Screen.init();
但是你不能调用这样的方法,除非它是静态的。 我怎样才能达到我想要达到的目标?如果我不够清楚,请在评论中提问,不要只是标记,我会更新我的问题

编辑:我知道我可以实例化游戏类,但这不是重点。我试图在实现Screen接口的每个类中运行init方法,这样我就不必单独指定每个类。

为什么不呢

Game s = new Game ();
s.init ();
或者,如果您实际使用了
屏幕
界面

Screen s = new Game ();
s.init ();

此外,您似乎混淆了接口和抽象类。。您正在定义一个接口。您不扩展
接口
,也不能实例化
接口


如果您想自动调用
init
,那么我建议您将其添加为静态块,或者从您的
super
构造函数调用它您需要实例化
游戏
,而不是屏幕。

在上面的代码中替换这一行

Screen s = new Screen();
这一行:

Screen s = new Game();
由于OOPs的动态绑定/运行时多态特性,这将起作用。
在运行时,实现此方法的对象(init())已确定。

此外,您似乎混淆了接口和抽象类。我看不出声明接口抽象的意义。已经是了,方法也是如此。默认情况下,方法也是公共的。此外,您不能实例化抽象类或接口,应该初始化哪个子类?为什么?这闻起来像是一种味道。请澄清。没有办法隐式访问类的每个实例。您必须保留一个实例集合,并在循环中对每个实例调用您的方法。或者,如果它是一个全局初始化过程,您可以将其设置为静态并调用一次。因此,您希望在启动时调用每个子类型中实现的
static
init
方法?这是一个正确的答案,但它没有代码,并且解释不清楚。对不起,我不知道这是规则。我觉得这很直截了当。不用担心。这不是一个正确的答案。我希望每个实现屏幕的类都能运行,而不仅仅是一个类。这是一个正确的答案-你可以尝试这个屏幕s=新游戏()但我相信你对一些基础知识有点困惑。不,不是你不明白我想要达到什么阅读编辑。因为我不想为我创建的每一个游戏都这样做,我希望它初始化所有实现屏幕类的类,你不能@Hamish