Много вещей не так с вашим кодом. Ошибка проста:
public int compareTo(Object o) {
if (findArea() == ((GeometricObject1) o1).findArea())
Параметр называется o , но вы хотите использовать o1 . Не могу работать о не о1. Подсказка: используйте настоящие имена, которые имеют значение и намерение. Не называй это o, но otherCircle
. Не называйте это o1
и o
(как в вашем методе max, но, например, firstCircle
и secondCircle
). о и о1 действительно легко читать / писать неправильно. Настоящие имена ... действительно трудно использовать неправильно.
Тогда: вам не нужно сравнивать три раза вручную:
return Double.compare(findArea(), ( (GeometricObject1) o1).findArea());
будет делать то, что вам нужно.
И: вы используете raw тип.
class Circle1 extends GeometricObject1 implements Comparable {
должно быть
класс Circle1 расширяет GeometricObject1 реализует Comparable {
и при этом правильной сигнатурой этого метода становится:
public int compareTo(Circle1 otherCircle) {
(так как вы опускаете из общего параметра, таким образом вам приходится иметь дело с Object и кастом)
Также обратите внимание: вы объявляете метод equals()
, который не переопределяет базовый метод equals()
из класса Object. Это может привести к всевозможным проблемам (вам нужно задать параметр типа Object
, и вы должны поставить @Override перед любым методом, который вы хотите переопределить).
Наконец: ваш метод max также очень запутан. Не звоните compare()
несколько раз, просто позвоните один раз и запомните результат этого звонка.