Таким образом, в основном у меня есть простая функция remove
которая выводит учащихся из моего списка, если идентификаторы совпадают. При написании этого метода я использую ==
поскольку s.getId()
возвращает примитивный тип. Но я написал метод .equals
который должен переопределить его, но теперь я не могу вызвать .equals
на s.getId()
.
equals
метод в классе Student
:
public boolean equals(StudentIF other) {
if (other == null) {
return false;
}
if (this.id == other.getId()) {
return true;
}
return false;
}
а затем мой метод remove
который находится в классе LL
:
public boolean remove(StudentIF s) {
// TODO Auto-generated method stub
StudentLLNode current = head;
if (s == null) {
return false;
}
if (s.getId() == (head.getStd().getId())) {
// StudentLLNode top = head;
head = head.getNext();
size--;
return true;
} else {
StudentLLNode previous, next;
previous = current;
next = current.getNext();
while (current != null) {
next = current.getNext();
if (s.getId() == (current.getStd().getId())) {
previous.setNext(next);
size--;
return true;
}
previous = current;
current = next;
}
}
return false;
}
Метод equals получает параметр Object as, вот как NetBeans автоматически генерирует метод equals для класса.
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
return true;
}
Метод equals
объекта принимает вход типа Object
. Правильная подпись для метода equals
:
public boolean equals(Object other)
Аннотации @Override
- отличная помощь для определения того, правильно ли вы переопределили метод.
Из учебника оракула:
При переопределении метода вы можете использовать аннотацию @Override, которая указывает компилятору, что вы собираетесь переопределить метод в суперклассе. Если по какой-то причине компилятор обнаруживает, что метод не существует в одном из суперклассов, тогда он будет генерировать ошибку.
equals
ожидаетObject
неStudentIF
, если вы добавите аннотацию@Override
в свой методequals
вы получите ошибку компилятора, поскольку вы фактически не переопределяете метод любого родительского класса.