ИТАК, так скажем, у вас есть два класса: ClassA
и ClassB
Переопределение класса Object равный метод
ClassA
расширяетObject
иClassB
расширяетClassA
ClassA
не имеет конструктора аргументClassB
имеет целочисленная переменная x и конструктор с целым аргументом, который инициализирует xClassA
не отменяетequals
, что это изObject
принадлежностиClassB
переопределенияхequals
так, что два объектаClassB
считаются равными, если целое число х имеет одинаковое значение в обоих объектов.//In Class B you have this method: public boolean equals (Object obj) { if (obj == null) { return false; } if (obj.getClass() != this.getClass()) { return false; } if (!super.equals(obj)) { return false; } B b = (B) obj; return this.x == b.x; }
В основном, если вы запустите этот код
B b1 = new B(1);
B b2 = new B(1);
System.out.println(b1.equals(b2));
Я считаю, «ложным» будет напечатано, но я пытаюсь понять, почему. Возможно, я не полностью понимаю концепцию переопределения, но я просто понял, что с B
следует переопределить метод Object.equals
, чтобы он мог убедиться, что поля x одинаковы.
Что кажется «неправильным», что мне не хватает?
В чем смысл переопределения 'equals', если вы возвращаете значение, возвращаемое' super.equals() '? –
1) Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –