它似乎有效,但它被认为是“好的”编程吗?
这里有一个例子来说明:
public class foo{
foomethod(){do something};
}
public class foo1 extends foo{
@override foomethod(){do something};
}
public class foo2 extends foo{
@override foomethod(){do something};
}
ArrayList x /*with foo1 and foo2 objects*/
for (Object o : x){((foo)o).foomethod();}
这被认为是“好的”编程吗?如果不是,什么是一个不错的紧凑替代方案? (如果可能的话,除了 switch(o.getClass()) 之外)
编辑,因为我似乎不太擅长澄清:)
我的意思是调用已被重写的方法而不是 super 方法。 我想做的另一种方法是:
ArrayList x/* 再次使用 foo1 和 foo2 对象*/
for (Object o : x){
switch(o.getClass()){
case foo1.class:
((foo1)o).foomethod();
break;
case foo2.class:
((foo1)o).foomethod();
break;
}
}
但我想避免使用 switch 语句,因为它会使代码变得更大、更复杂。
最佳答案
它是否被认为可以接受完全不是重点。真正的问题是它并没有像你想象的那样做。它不会“调用重写的方法”。派生类的方法仍然被调用。如果要调用重写的方法,则必须在派生类中使用 super 关键字。
关于java - 类型转换为父类(super class)并调用重写方法是否可以接受? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897430/