Получение максимального значения из объекта в массиве абстрактных классов

Я пытался решить это. Я хотел получить максимальное значение 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];
}

но он не работает, так что я должен сделать, чтобы он работал? Спасибо за ответы.

2 ответа

Решение

Я предполагаю, что код даже не компилируется. Это потому, что недостаточно определить объект как тип, вам нужно привести ссылку для доступа к его методам или полям.

ClassA a = (ClassA) array[i];
if (a.getA() > max.getA())
    max = a;

Кстати, это не пример полиморфизма, так как здесь вы не используете переопределенный метод.

Пример использования полиморфизма может выглядеть так

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;
    }
}

Сделайте нулевую проверку на макс, а затем сравните значения

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];
        }
    }
}
Другие вопросы по тегам