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