【问题标题】:Is it possible to edit an Abstract class? Java是否可以编辑抽象类?爪哇
【发布时间】:2018-10-24 20:04:30
【问题描述】:

我有 2 节课。一个包含一组不同类型水果的私有哈希映射(此类称为fruitStore),另一个是抽象类,在其字段中包含字符串的私有ArrayList(此类称为fruitNames)。

fruitStore 中 HashMap 的键是每个水果的名称,字段是水果的信息(价格和有效期等)。

目前,我的目标是将所有键(水果名称)放入fruitNames 的ArrayList 中。

到目前为止,我尝试的是在fruitStore 中创建另一个私有字符串数组,将其命名为名称,然后将所有名称存储在其中。之后我决定在fruitNames 类中创建一个函数来移动所有水果名称。

所以我在fruitNames中做了如下代码

//making an object of fruit_store
private fruitStore fruit_store = new fruitStore();

void insert_fruit(ArrayList<String> fruits){
    for ( int i = 0; i < fruit_store.names.size(); i++ ){
    //here i planned to add the elements in names to the fruitList array
    }
}

但是,我有一个问题。由于 ArrayList 名称是私有的并且只能在 fruitStore 类中访问,因此我无法在任何其他类中使用它。我能想到的唯一解决方案是公开姓名,但有人告诉我不要这样做。

有人知道这个问题的解决方法吗?

【问题讨论】:

  • 您可以简单地扩展抽象类并向新类添加一个方法,以便它可以访问数组列表。
  • 最好提供改变数组列表而不直接暴露它的方法
  • 请不要像小说一样描述你的代码。向我们展示代码。例如。而不是“在其字段中包含字符串的私有ArrayList的抽象类(这个类称为fruitNames)”向我们展示代码abstract class fruitNames { private ArrayList&lt;String&gt; xxx; }
  • 为什么你的fruitNames 类需要是抽象的,为什么不应该公开名称列表,即你能详细说明“我被告知不要这样做”吗?这听起来像是你可以用一个简单的不可变和公共List 来实现的东西(假设你的水果名称列表在编译时是已知的)。
  • 它的抽象,因为它有子类 apple、orange、pear 等。

标签: java class arraylist abstract-class


【解决方案1】:

您可以在 fruitStore 类中创建一个方法,为您获取大小而不暴露整个字段

public int getSize(){
    return names.size()
}

【讨论】:

  • 太棒了,我忘记了 getter 和 setter
【解决方案2】:

听起来您最好将其声明为受保护。

"private 修饰符指定该成员只能在其自己的类中访问。protected 修饰符指定该成员只能在其自己的包中访问(与 package-private 一样),此外,还可以由子类访问另一个包中的同类产品。” - Controlling Access to Members of a Class

【讨论】:

  • 作为“一般”规则,我建议不要公开该类的内部功能,但这就是我
猜你喜欢
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多