如何使用从Java中的嵌套接口继承的静态方法定义嵌套的静态类?

如何使用从Java中的嵌套接口继承的静态方法定义嵌套的静态类?,java,interface,static,nested,abstract,Java,Interface,Static,Nested,Abstract,我有一个嵌套类的Java问题 我的第一节课结构如下: public class TopClass { public void mainMethod() { // uses the different "method" methods from // NestedClass-implementing nested classes } private interface NestedClass {

我有一个嵌套类的Java问题

我的第一节课结构如下:

public class TopClass {

    public void mainMethod() {
        // uses the different "method" methods from 
        // NestedClass-implementing nested classes
    }            

    private interface NestedClass {
        public void method();
    }    

    private class NestedClass1 {
        public void method() {
        }
    }    

    private class NestedClass2 {
        public void method(){
        }
    }    
}
但现在我希望这些方法是静态的,因为它们主要应该是静态的

我不能在没有静态类的情况下使它们成为静态的,但是这没有问题,我使类成为静态的,它们应该是静态的

现在看起来是这样的:

public class TopClass {

    public void mainMethod() {
        // uses the different "method" methods from 
        // NestedClass-implementing nested classes
    }            

    private static interface NestedClass {
        public void method();
    }    

    private static class NestedClass1 {
        public static void method() {
        }
    }    

    private static class NestedClass2 {
        public static void method(){
        }
    }    
}
但麻烦开始了。静态方法不能正确地从非静态接口方法继承,因为我收到这条消息,这个静态方法不能从Eclipse中的TopClass.NestedClass隐藏实例方法

当我将接口方法设置为静态时,它会给我以下错误:接口方法的修饰符非法;只允许公开和摘要

因此,我想到了一个抽象类,并尝试了以下方法:

public class TopClass {

    public void mainMethod() {
        // uses the different "method" methods from 
        // NestedClass-implementing nested classes
    }    

    private static abstract class NestedClass {
        public static abstract void method();
    }    

    private static class NestedClass1 {
        public static void method() {
        }
    }    

    private static class NestedClass2 {
        public static void method(){
        }
    }    
}
但同样,表面上抽象的方法不能声明为静态的:NestedClass类型中的抽象方法只能设置可见性修饰符(public或protected)

将静态保留在抽象类方法中,NestedClass1和2中的方法会出现此错误:此静态方法无法对TopClass.NestedClass隐藏实例方法

难道没有任何方法可以声明某种覆盖静态方法的上层建筑吗

编辑: 我实际上试图解决的问题是Java不可能存储对方法的引用。相反,我有这些类,每个人只有一个方法,但要将它们存储在一个列表f.e.中,它们必须能够被上层建筑捕获。
我得到了尝试匿名类或枚举的提示,现在就要尝试了。

接口和静态不能同时使用。完全Java不支持在静态方法上创建/施加模式。

接口和静态不能同时使用。完全Java不支持在静态方法上创建/施加模式。

接口/抽象类是嵌套的这一事实与问题无关。
你就是不能。Java中没有办法强制某些类来实现静态方法。只需哭泣和投降,并使用实例方法

接口/抽象类嵌套的事实与问题无关。 你就是不能。Java中没有办法强制某些类来实现静态方法。只需哭泣和投降,并使用实例方法

静态抽象是一种矛盾。静态方法与其他语言的类方法不同。当您创建一个静态方法时,它在单个类上运行,它不会被子类继承,也不会将其实现推迟到子类

您没有解释为什么希望这些方法是静态的。如果您希望这些方法由子类定义,那么它们就不应该被定义。

静态抽象是一个矛盾。静态方法与其他语言的类方法不同。当您创建一个静态方法时,它在单个类上运行,它不会被子类继承,也不会将其实现推迟到子类


您没有解释为什么希望这些方法是静态的。如果您希望这些方法由子类定义,那么它们就不应该被定义。

静态方法声明之后必须始终有一个定义。它不能由子类实现

我认为你只是没有正确处理你的问题。尝试不同的方法

使NestedClass成为NestedInterface接口,并将不同的实现存储为实现此接口的匿名类:

public static final NestedInterface firstNested = new NestedInterface() {
    @Override
    public void method() {
        // ...
    }
};
将NestedClass设为枚举NestedEnum,并将不同的实现存储为枚举值,以实现枚举中的抽象方法。只有当您有固定数量的实现可供选择,并且不希望接受来自外部源的NestedClass实现时,这才有效

public enum NestedEnum  {

    FIRST {
        @Override
        public void method() {
            // ...
        }
    };

    public abstract void method();
}
编辑:回复您的评论:

类本身也是静态的

嵌套类上下文中的static意味着可以在没有包含类的实例的情况下实例化该类

可以通过TopClass.this.new NestedClass1实例化第一个示例中的常规嵌套类。通常,您只需从TopClass的构造函数或实例方法中编写新的NestedClass1,但在这种详细的形式中,您可以清楚地看到对TopClass.this的依赖。这也可以从NestedClass1的任何方法中看到,因为您可以使用TopClass.This访问包含的类

可以通过新的TopClass.NestedClass1实例化第二个示例中的静态嵌套类。同样,您可以只编写新的NestedClass1,但详细的表单清楚地表明构造只依赖于TopClass,而不与TopClass的实例相关联。您甚至可以使用相同的代码段new TopClass.NestedClass1从外部类创建实例,而无需创建TopClass实例


我建议您看看。

静态方法声明后面必须始终跟有定义。它不能由子类实现

我认为你只是没有正确处理你的问题。尝试不同的方法

使NestedClass成为NestedInterface接口,并将不同的实现存储为实现此接口的匿名类:

public static final NestedInterface firstNested = new NestedInterface() {
    @Override
    public void method() {
        // ...
    }
};
将NestedClass设为枚举NestedEnum,并将不同的实现存储为枚举值,以实现枚举中的抽象方法。只有当您有固定数量的实现可供选择,并且不希望接受来自外部源的NestedClass实现时,这才有效

public enum NestedEnum  {

    FIRST {
        @Override
        public void method() {
            // ...
        }
    };

    public abstract void method();
}
编辑:回复您的评论:

类本身也是静态的

嵌套类上下文中的static意味着可以在没有包含类的实例的情况下实例化该类

可以通过TopClass.this.new NestedClass1实例化第一个示例中的常规嵌套类。通常,您只需从TopClass的构造函数或实例方法中编写新的NestedClass1,但在这种详细的形式中,您可以清楚地看到对TopClass.this的依赖。这也可以从NestedClass1的任何方法中看到,因为您可以使用TopClass.This访问包含的类

可以通过新的TopClass.NestedClass1实例化第二个示例中的静态嵌套类。同样,您可以只编写新的NestedClass1,但详细的表单清楚地表明构造只依赖于TopClass,而不与TopClass的实例相关联。您甚至可以使用相同的代码段new TopClass.NestedClass1从外部类创建实例,而无需创建TopClass实例


我建议你看看。

你在这里真正想要完成的是什么?这意味着除了嵌套类、接口等之外的实际目标是什么?看来不管真正的问题是什么,你都可能想得太多了。静态方法的接口毫无意义,因为静态方法只声明/存在一次。这很好:但我认为静态类中的每个方法都是静态的,-不,这不是真的。我认为您对嵌套类和内部类之间的区别感到困惑。阅读,你在这里真正想要完成的是什么?这意味着除了嵌套类、接口等之外的实际目标是什么?看来不管真正的问题是什么,你都可能想得太多了。静态方法的接口毫无意义,因为静态方法只声明/存在一次。这很好:但我认为静态类中的每个方法都是静态的,-不,这不是真的。我认为您对嵌套类和内部类之间的区别感到困惑。Read和Static意味着方法的执行独立于类的实例。因为类只是表示方法,所以情况就是这样。类本身也是静态的。静态意味着方法的执行独立于类的实例。因为类只是表示方法,所以情况就是这样。类本身也是静态的。。