我一直试图解决这个问题。 我想获得最大的ClassA值。 所以我有一个接口和2个类
public interface Something {
}
public class ClassA implements Something{
private int a;
public ClassA(int a) {
this.a = a;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
public class ClassB implements Something{
private int b;
public ClassB(int b) {
this.b = b;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
public class Program {
public static void main(String[] args) {
Something[] array = new Something[10];
array[0] = new ClassA(1);
array[1] = new ClassA(2);
array[2] = new ClassB(0);
ClassA max = null;
for (int i = 0; i < array.length; i++) {
if(array[i]!=null && array[i] instanceof ClassA){
//what do to here
}
}
}
}
我以为我把它放在那里,
if(array[i].getClassA()>max.getClassA()){
max = array[i];
}
但它不起作用,那么我该怎么做才能使它正常工作? 谢谢你的回答。
答案 0 :(得分:0)
我猜测代码甚至没有编译。这是因为仅仅确定一个对象是一个类型是不够的,你必须强制引用它来访问它的方法或字段。
ClassA a = (ClassA) array[i];
if (a.getA() > max.getA())
max = a;
BTW这不是多态性的一个例子,因为你没有在这里使用重写方法。
使用多态的示例可能看起来像
interface Something {
boolean isA();
int getA();
}
class ClassA implements Something {
// fields and constructor
public boolean isA() { return true; }
public int getA() { return a; }
}
Something[] array = { new ClassA(1), new ClassA(2), new ClassB(0) };
ClassA max = null;
for (Something s : array) {
if (s.isA()) {
if (max == null || max.getA() < s.getA())
max = s;
}
}
答案 1 :(得分:0)
对max进行空检查,然后比较值
for (int i = 0; i < array.length; i++)
{
if(array[i]!=null && array[i] instanceof ClassA){
if (max == null || array[i].getA() > max.getA()){
max = array[i];
}
}
}