【问题标题】:Java, filling arrays, and inheritanceJava、填充数组和继承
【发布时间】:2010-04-06 02:45:19
【问题描述】:

我想我的 Java 数组遇到了继承概念墙。我对Java有点陌生,所以如果我有颠倒的事情请告诉我。本质上,我想做三件事:

  1. 使用我的 Runners 类的属性创建一个 runnersArray。
  2. 使用我的 GenerateObjects 类的 GenerateObjects 方法填充我的 runnersArray。
  3. 在我的 Evaluating 类的 Evaluating 方法中访问我填充的 ​​runnersArray 的内容。

问题似乎是 runnersArray 对上面第 2 步和第 3 步的方法是不可见的,但是它们的类(由于设计原因)不能继承或扩展 Runners 类。

提前感谢您的任何建议。

这里有一些代码 sn-ps 显示了我正在尝试做的事情:

public class Runners extends Party {

    Runners[] runnersArray = new Runners[5];
}

public class GenerateObject extends /* certain parent class */ {

     public GenerateObject (int arrayNum) {
          runnersArray[arrayNum] = /* certain Runners attributes */;
     }
}

public class Evaluating extends /*certain parent class*/ {

     public Evaluating (int arrayNum) {
          System.out.println(/* String cast attribute of runnersArray[arrayNum]*/;
     }
}

【问题讨论】:

  • 根据您发布的骨架,为什么 GenerateObject 和 Evaluating 需要 Runners 的实现细节来完成看似微不足道的操作(分配成员,获取字符串)? Runners 不能提供方法来代替这些其他类直接处理其状态吗?
  • 我可以为此使用 Runners,但我有大约 5 或 6 个类似于 Runners 的类。按照您建议的方式对每个类进行编码会很乏味。 GenerateObject 和 Evaluating 旨在为所有这些类提供一站式服务,并执行更复杂的操作。

标签: java arrays inheritance


【解决方案1】:

在您的代码示例中,runnersArray 是一个package-private(因为它没有任何访问说明符,默认是包私有)Runners 类的实例变量。所以你不能只从 GenerateObject 和 Evaluating 类中访问它。

如果你想让 runnersArray 成为一个全局可见的对象,那么它也许应该是一个公共静态变量。

public class Runners extends Party {
    public static Runners[] runnersArray = new Runners[5];
}

然后你可以像这样从其他类访问它:

public class GenerateObject extends /* certain parent class */ {
    public GenerateObject (int arrayNum) {
        Runners.runnersArray[arrayNum] = /* certain Runners attributes */;
    }
}

希望这会有所帮助。

【讨论】:

  • 这很理想。感谢您的实用解决方案。我将阅读公共静态文章以提高知识。
猜你喜欢
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多