我有一个class
,其中有一个ArrayList
,它的逻辑让我们称之为Stomach。
来自class
Meal
和Drinks
的两个实例已添加到ArrayList
Main
中的class
。这两个类有一个覆盖的方法,它返回getName()
方法。
但在我执行所有操作的class
的{{1}}中,我无法使用foreach循环使用ArrayList
对象的toString()
方法。
ArrayList
我尝试在public void amountOfElements() {
for (Digestion d : stomach) {
//prints the hash code. I can't call the corresponding toString() equivalent in here.
System.out.println(d);
}
Stomach
中创建一个属性class
,然后从中调用该方法,但我得到了ArrayList
,因为名字没有'还存在。
我必须这样解决,因为实现了返回名称的方法。
提前致谢。
答案 0 :(得分:6)
覆盖toString
和/或其子类中的Digestion
方法,以返回要为Digestion
个实例输出的任何字符串:
class Digestion { // or `class Meal` or `class Drink` or `class Stomach`, etc.
// ...other implementation...
@Override
public String toString() {
String result;
/* logic assigning to `result` goes here */
return result;
}
}
完整示例(live copy):
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
Digestion[] stomach = new Digestion[] {
new Meal(),
new Drink(),
new Snack()
};
for (Digestion d : stomach) {
System.out.println(d);
}
}
}
class Digestion {
@Override
public String toString() {
return "I'm a Digestion instance";
}
}
class Meal extends Digestion {
@Override
public String toString() {
return "I'm a Meal instance";
}
}
class Drink extends Digestion {
@Override
public String toString() {
return "I'm a Drink instance";
}
}
class Snack extends Digestion {
@Override
public String toString() {
return "I'm a Snack instance";
}
}
输出:
I'm a Meal instance I'm a Drink instance I'm a Snack instance
答案 1 :(得分:1)
为了能够做到这一点:
for (Digestion d : stomach) {
胃必须持有消化对象或实施消化的物体,具体取决于消化是什么(类或界面)
所以你需要确保用餐和饮料是超级消化的子类,并且两者都有{{ 1}}方法正确覆盖...
所以 每个班级都应该有像
这样的方法toString