есть класс, допустим А, в нём создан объект safe типа HashMap<String, Currency>, где класс Currency описан со всеми сетами, гетами, всё как надо.
теперь я хочу в другом классе (назовём B) вызвать встроенный хешмеповский метод для safe:
safe.get(название ключа)
отладчик ругается, поскольку класс другой и ни о каком safe он ничего не знает. Вопрос, как сослаться на А, чтобы класс B нормально воспринял эту строчку?
[Ответ]
manifest 12:36 26.12.2010
class B extends A {} ?
если вопрос не о наследовании, код в студию.
[Ответ]
vuster 15:23 26.12.2010
наследование здесь вроде бы не при чём
class Depository {
HashMap<String, Currency> safe =
new HashMap<String, Currency>();
public Depository() {
super();
}
}
Currency не привожу, там просто 3 поля и методы get,set
import java.util.HashMap;
public class Bank {
private Depository depInstance;
public final Depository getDepository() {
return depInstance;
}
public Bank(Depository depInstance) {
this.depInstance = depInstance;
}
public void addCurrency(Currency c) {
safe.put(c.getName(),c);
}
}
и вот здесь ошибка: safe -неизвестный объект. Если его описать как объект класса Depositiory, тогда будет проблема с методом put, ведь он не описан в Depository, а является встроенным методом HashMap[Ответ]
manifest 16:04 26.12.2010
1) тут либо свойcтво safe класса Depository должно быть публичным
class Depository {
public HashMap<String, String> safe = new HashMap<String, String>();
...
}
и тогда можно сделать так:
class Bank {
public void addCurrency(String c) {
depInstance.safe.put("key", c);
}
...
}
2) либо отказаться от свойства safe вовсе и унаследовать твой класс от HashMap
class Depository extends HashMap<String, String> {}
тогда можно будет сделать так:
class Bank {
public void addCurrency(String c) {
depInstance.put("key", c);
}
...
}
Какой подход использовать, зависит только от тебя и твоей задачи, но:
1) делать свойства публичными плохой стиль, хороший - завернуть в методы get/set
2) по Страуструпу, наследования нужно избегать везде где можно обойтись свойством.
* в моих примерах, вместо твоего Currency используется String
[Ответ]
Shoroh 10:44 08.02.2011
если работаете без объявления классов, то тот класс, метод которого вызываете должен быть статичесим.
[Ответ]