java - 使用抽象方法而不是字段

标签 java inheritance

我不知道如何描述我的问题,所以我会给你一个快速的解释。

我想制作一个程序,用户可以在其中选择一种语言,然后以该给定语言打印之后的文本。目前我在想这样的事情:

// Super | class Language;
// Sub   | --- class German;
// Sub   | --- class English;

if(UserChoseEnglish()) 
  language = new English();
else
  language = new German();

英语和德语具有相同的 public static final 字段,因此我可以使用用户选择的 language.anyMethod();。 AFAIK 你不能覆盖字段,所以我正在考虑将所有字段包装在抽象方法(在父类(super class)中)中,只返回值并覆盖它们。

 public abstract class Language
 {
   public abstract String thanks();
 }

 public class English extends Language
 {
   @Override
   public String thanks()
   {
     return "Thanks!";
   }
 }

 public class German extends Language
 {
   @Override
   public String thanks()
   {
     return "Danke!";
   }
 }

这被认为是不好的做法吗?我应该只覆盖 getter 方法还是只是错过了一些我不知道的东西?如果您想帮忙,那就太好了。

(我目前只是在玩 Java,并且认为可以选择一种语言会很有趣。如果您有经验可以分享(库,属性,...?),请随时分享):)

最佳答案

如果问题确实是 I18N,您应该按照 @azurefrog 的建议查看 ResourceBundles。除此之外,这是一个合理的 OO 设计——基类定义了一个方法 (thanks()),每个具体的子类都实现了它。

关于java - 使用抽象方法而不是字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922205/

相关文章:

java - 在 Java 中用定界符连接值列表的最优雅的方法是什么?

java - Android 意外的顶级异常和验证错误

python - 从父类(super class)获取子类的名称?

c++ - STL 中的继承问题

swift - 为什么我们要在 Swift 中覆盖初始化器?

java - 如何告诉 gradle run 使用自定义工作目录?

java - 如何使 gif 运行一次并在 Java 中停止?

java - 我不知道为什么会出现这种情况? "java.nio.channels.UnresolvedAddressException"

java - MapStruct 泛型 Map 和 map 子对象的组合列表

c++ - 使用operator=和initializer_list找不到继承