java - 重载枚举抽象方法

标签 java enums overloading overriding

是否可以重载枚举抽象方法?

我已经在我的代码中试过了,但没有效果。 呈现类

public class Test {
    public void test(String string){
        System.out.println(string);
    }

    public void test(Object object){
        System.out.println("Test1");
    }

    public static void main(String[] args) {
        Object object = new Object();
        test.test(object);
        test.test("what if?");
    }
}

给出预期的结果

Test1
what if?

枚举

public enum TestEnum {
    TEST1{
        public void test(String string){
            System.out.println(string);
        }

        public void test(Object object){
            System.out.println("Test1");
        }
    },
    TEST2{
        public void test(Object object){
            System.out.println("Test2");
        }
    };

    public abstract void test(Object object);
}

public class Test {
    public static void main(String[] args) {
        Object object = new Object();
        TestEnum.TEST1.test("what if?");
        TestEnum.TEST1.test(object);
    }
}

返回

Test1
Test1

是否有可能重载 Enum 方法,或者我做错了什么?或者也许我应该检查覆盖方法内部的类型然后采取相应的行动?但是后来我删除了 switch 语句只是为了引入另一个 switch 语句。

最佳答案

关于枚举的事情是,带有主体的值被实现为 TestEnum 的匿名子类;所以它们看起来像这样:

final TestEnum TEST1 = new TestEnum() { /* body */ };

虽然 TEST1 的具体类是 TestEnum$1(或者编译器决定给它的任何名称),但引用的类型是 TestEnum,因此 TEST1 主体之外的任何代码只能访问 TestEnum 上定义的方法。

关于java - 重载枚举抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43504888/

相关文章:

java - 使映射实体的属性为只读

java - 当您将鼠标悬停在链接另一个 div 上时,图像在显示 div 中发生变化

Java 枚举单独的类

java - 不同类型集合的集合重载

delphi - 在PascalScript中导入重载函数

java - 不同 ListView 项的不同选择颜色

java - Apache Camel : How to persist property or header between multiple Exchanges after split and subsequent Exception?

C# 枚举 VS 可空属性名称冲突

javascript - Typescript 中的 const 枚举

oop - 在 OOP 中,运算符重载实际上是多态性还是参数重载?