为什么我们需要外界的枚举常量法的方法,虽然我们已经为每个常数不同的方法?

问题描述 投票:0回答:1

我试图通过使用功能适用于所有的常量和定义功能为颜色enum和其他例如信息每个常量的发言权,使GREEN可是为什么我需要定义的抽象函数一样,虽然我已经有个别功能为每不断我对enum

enum color {
    GREEN {
        public void info() {
            System.out.println("Dangerous Color: GREEN");
        }   
    },
    RED {
        public void info() {
            System.out.println("Dangerous Color");
        }
    },
    BLUE {  
        public void info() {
            System.out.println("Ordinary universal colour: BLUE");
        }    
    };         
      public void info() { System.out.println("Ordinary universal colour"); }         
    public abstract void info();    
}   
public class EnumDemo4 {    
    public static void main(String[] args) {    
        color[] c = color.values();
        for (color c1 : c) {
            System.out.println(c1);
            c1.info();    
        }
    }    
}

为什么我们需要方法外enum常数法,虽然我们已经为每个常数不同的方法?

为什么我们需要补充,虽然我们已经定义了各自恒定功能的抽象的,非抽象的方法?

java function enums abstract
1个回答
0
投票

首先,你的代码不能编译。你不能在同一个枚举定义info()两次。

这条线已被删除:public void info() { System.out.println("Ordinary universal colour"); }

无论如何,当你期待它的工作?它不与任何颜色相关联。

正确的定义是这样的:

enum Color {
    GREEN {
        @Override
        public void info() {
            System.out.println("Dangerous Color: GREEN");
        }   
    },
    RED {
        @Override
        public void info() {
            System.out.println("Dangerous Color");
        }
    },
    BLUE {  
        @Override
        public void info() {
            System.out.println("Ordinary universal colour: BLUE");
        }    
    };         

    public abstract void info();    
}   

您需要定义枚举水平abstract void info()的原因是因为要强制在你的枚举所有的常量提供。据低保列举的所有实例将提供它,所以你c1.info()功能行main()工作。

如果您尝试删除abstract void info(),您的常量将不约而同各有info()实现的,但没有告诉编译器在Color枚举的水平,你将永远拥有它。因此,将编译失败。

如果你想要一个稍微不那么笨重的定义,你可以改变它这样,它做同样的事情:

enum Color {
    GREEN("Dangerous Color: GREEN"),
    RED("Dangerous Color"),
    BLUE("Ordinary universal colour: BLUE");

    private final String info;

    Colour(String info) {
      this.info = info;
    }

    public void info() {
       System.out.println(info);
    }    
}   
© www.soinside.com 2019 - 2024. All rights reserved.