3 回答
TA贡献1851条经验 获得超5个赞
这里要学习的教训是*多态性”。
类,Cat并且Dog应该实现一个公共接口,声明可用于它们的方法:
interface Animal {
void eat(SomeOtherInterface food);
void giveSound(BufferedWriter output);
void move();
}
class Cat implements Animal {
@Override public void eat(SomeOtherInterface food){
// consume the food
}
@Override public void giveSound(BufferedWriter output){
output.write("Meaw");
}
@Override public void move(){
// move within the world
}
}
class Dog implements Animal {
@Override public void eat(SomeOtherInterface food){
// consume the food
}
@Override public void giveSound(BufferedWriter output){
output.write("Woof");
}
@Override public void move(){
// move within the world
}
}
然后你给你的collecton一个最通用的通用类型的泛型参数,提供你想要访问的方法:
Collection<Animal> myAnimals = new ArrayList();
myAnimals.add(new Cat());
myAnimals.add(new Dog());
try( BufferedWriter output = new BufferedWriter(new OutputStreamWriter(System.out))){
for(Animal animal : animals)
animal.giveSound(output);
}
TA贡献1779条经验 获得超6个赞
我做了一些工作。要访问数组列表中对象的方法,我们可以使用 java.lang.reflect 包。
我可以先获取所有声明的方法,然后使用参数调用它们。
所以我的程序会是这样的:
public class Methodcall{
ArrayList <Object> al = new ArrayList<Object>();
al.add(new Cat());
al.add(new Dog());
for(Object a:al)
{
class ax = a.getClass();
Method[] methods=ax.getdeclaredMethods();
for(Method m:methods)
{
System.out.println(method.getName);
}
}
}
}
在此之后,我们可以通过使用反射的其他成员来访问方法。
添加回答
举报